如何在Windows上使用从XHR到Laravel的nginx使用multipart / form-data代理文件上传?

时间:2018-05-21 10:08:12

标签: php laravel nginx multipartform-data firewall

我已经在网上搜索了一天以上相同类型的问题,并且几乎尝试了所有解决方案,但是我无法找到解决方案。

情况:我有一个域,其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请求时遇到了一些问题,我们使用了plain XHR用于POST和PUT请求。

另外我需要提一下,我已经使用这个link从网站上新下载了预构建包,即我没有使用源代码构建它。

实际行为:使用上述设置发送此类POST和PUT请求时,我们无法从服务器获得响应。我们也有以下状态:

  • 即使使用multipart / form数据内容类型,我们也可以不用文件向服务器发送POST和PUT请求,没有问题。
  • GET和DELETE请求正常。
  • 如果我删除代理并将请求直接发送到Laravel服务器,则没有问题,文件将被保存(大小为5 MB到10 MB,这是我们想要的大小),PUT和POST和multipart / 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 vhost config:

<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

正如我在域DNS中提到的那样,

myhost.net被路由到公共IP。

如果我错过了什么,请告诉我。

更新1:

我找到了这个问题。防火墙,无论是Windows服务器防火墙还是网络防火墙都会阻止流如果我同时关闭两个防火墙它可以正常工作,但是,它们中的任何一个都打开了,只有当我们允许HTTP或HTTPS流量时,我们才会遇到同样的问题。

这证明nginx和laravel配置很好,但是,仍然存在一个问题,即防火墙阻止它们的请求有什么问题?

0 个答案:

没有答案