Как прокси-файл загрузки с multipart / form-data, используя nginx из XHR в Laravel на Windows? - PullRequest
0 голосов
/ 21 мая 2018

Я искал в сети более одного дня проблему такого же типа и почти перепробовал все решения, но не смог найти решение.

Ситуация: У меня есть домен, чья запись A указывает на мой общедоступный IP-адрес, на котором работает Windows Server 2012 R2.На 80-м порту у меня есть http-запрос от nginx к прокси (нас сейчас не касается HTTPS).nginx проксирует запрос к виртуальным хостам Apache, сам Apache работает на порту 9090.

Однако приложение, которое мы запускаем, имеет Angular 4 в передней части и Laravel 5.6 в задней части, так как у httpClient Angular 4 есть некоторые проблемы.отправляя запрос multipart / form-data, который мы хотели использовать для загрузки файла, мы использовали обычный XHR для запросов POST и PUT.

Также необходимо отметить, что я недавно загрузил пакет предварительной сборки с веб-сайтаиспользуя эту ссылку , т. е. я не построил ее из исходного кода.

Фактическое поведение: При отправке таких запросов POST и PUT с упомянутой настройкой мы делаемне получить ответ от сервера.Также у нас есть следующие состояния:

  • Мы можем отправлять запросы POST и PUT без файла на сервер даже с типом содержимого данных multipart / form, без проблем.
  • GET иDELETE-запросы работают нормально.
  • Если я удалю прокси-сервер и отправлю запросы напрямую на сервер Laravel, то проблем не будет, и файлы будут сохранены (с размерами от 5 МБ до 10 МБ, то естьнаш желаемый размер), с 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

myhost.net маршрутизируется на общедоступный IP, как я упоминал изDNS домена.

Пожалуйста, дайте мне знать, если я что-то пропустил.

Обновление 1:

Мне удалось найти проблему.Брандмауэр, будь то брандмауэр Windows Server или сетевой брандмауэр блокирует трафик.Если я включу оба брандмауэра, они будут работать нормально, однако любой из них будет включен, и только если мы разрешим трафик HTTP или HTTPS, тогда снова возникнет та же проблема.

Это доказывает, что конфигурации nginx и laravelхорошо, однако, все еще остается вопрос, что не так с запросами, которые заставляют брандмауэр блокировать их?

...