php - 如何在 Windows 上使用 nginx 从 XHR 到 Laravel 代理文件上传与 multipart/form-data?
问题描述
我在网上搜索了一天多相同类型的问题,几乎尝试了所有解决方案,但我无法找到解决方案。
情况:我有一个域,其 A 记录指向我的公共 IP 地址,它运行 Windows Server 2012 R2。在端口 80 上,我有 nginx 代理 http 请求(我们现在不关心 https)。nginx 会将请求代理到 apache 虚拟主机,apache 本身在端口 9090 上运行。
我们运行的应用程序在前端有 Angular 4,在后端有 Laravel 5.6,但是,由于 Angular 4 的 httpClient 在发送我们想要用于文件上传的 multipart/form-data 请求时存在一些问题,我们使用普通 XHR 进行 POST和 PUT 请求。
另外我需要提一下,我已经使用此链接从网站上新下载了预构建包,即我没有从源代码构建它。
实际行为:使用上述设置发送此类 POST 和 PUT 请求时,我们不会从服务器获得响应。我们也有以下状态:
- 即使使用多部分/表单数据内容类型,我们也可以向服务器发送不带文件的 POST 和 PUT 请求,没有问题。
- GET 和 DELETE 请求工作正常。
- 如果我删除代理并将请求直接发送到 Laravel 服务器,那么就没有问题,并且文件将被保存(大小为 5 MB 到 10 MB,这是我们想要的大小),带有 PUT 和 POST 以及多部分/form-data 作为内容类型。
期望的行为,我们想要的:我们应该能够发送带有 POST 和 PUT 请求的文件,就像 GET 等任何其他方法一样。
代码:
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
server_names_hash_bucket_size 64;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
server {
proxy_request_buffering off;
server_name myhost.net;
location / {
proxy_pass http://myhost.local:9090;
}
}
}
Apache 虚拟主机配置:
<VirtualHost *:9090>
DocumentRoot "C:/path/to/htdocs"
ServerName localhost
</VirtualHost>
<VirtualHost *:9090>
DocumentRoot "C:/path/to/htdocs/myhost/public"
ServerName myhost.local
ServerAlias myhost.net
ErrorLog "C:/path/to/apache/logs/vhosts/myhost.local-error.log"
</VirtualHost>
Windows 主机文件,虽然我认为它不重要:127.0.0.1 myhost.local ::1 myhost.local
myhost.net
正如我从域 DNS 中提到的,被路由到公共 IP。
如果我错过了什么,请告诉我。
更新1:
我已经能够找到问题所在。防火墙,无论是 windows 服务器防火墙还是网络防火墙都会阻止流量。但是,如果我打开两个防火墙它都可以正常工作,那么它们中的任何一个都处于打开状态,并且只有当我们允许 HTTP 或 HTTPS 流量时,我们才会再次遇到同样的问题。
这证明了 nginx 和 laravel 配置都很好,但是,仍然存在一个问题,使防火墙阻止它们的请求有什么问题?
解决方案
推荐阅读
- jquery - 为什么设置了 data-plugin="counterup" 时标签内容没有更新
- sqlite - 在 Windows 10 中安装 sqlite3
- ios - 是否可以根据 SDK 版本隐藏代码
- javascript - 查找数组中最大和最小数字的索引
- javascript - javascript对象的列分割
- reactjs - React 单元测试查找组件中的元素
- android - Recyclerview 以编程方式设置背景颜色
- python - 如何在特征值约束的情况下最大化 ML 模型输出预测?
- etw - 如何强制 PerfView 从某些特定但不是所有进程收集 ETW 事件?
- javascript - 如何从两步的文件中导入上下文