Я искал в сети более одного дня проблему такого же типа и почти перепробовал все решения, но не смог найти решение.
Ситуация: У меня есть домен, чья запись 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хорошо, однако, все еще остается вопрос, что не так с запросами, которые заставляют брандмауэр блокировать их?