Nginx прокси Apache2 php ERR_CONNECTION_RESET

#php #nginx #apache2

#php #nginx #apache2

Вопрос:

Я развернул приложение в docker, которое представляет собой php-приложение с apache2. В docker есть nginx, используемый для прокси-сервера для приложений. www.myhost.com -> nginx(docker) -> мое приложение (docker)

Если я запрашиваю свое приложение через host:port, оно выполняется успешно. Когда я запрашиваю свое приложение через доменное имя, оно получает ERR_CONNECTION_RESET случайным образом.

 net::ERR_CONNECTION_RESET 200 (OK)
 
 server {
    listen 80;
    server_name myhost.com;
    client_max_body_size 5120m;
    location / {
        #client_max_body_size 1024M;
        #proxy_redirect off;
        #proxy_set_header Host $http_host;
        #proxy_set_header X-Real-IP $remote_addr;
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_request_buffering off;
        #proxy_buffering off;
        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;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_pass http://192.168.17.19:8080/;
      }
    }
 

Комментарии:

1. Просто взглянув на пару других ответов , можете ли вы попробовать отключить сжатие с помощью nginx?

2. @johnson какие образы docker вы используете? 192.168.17.19 ваш адрес моста? можете ли вы добавить больше деталей, например docker run , docker-compose или Dockerfile для имитации проблемы?

3. Посмотрите эту статью на freeCodeCamp: freecodecamp.org/news /…

4. попробуйте добавить proxy_set_header X-NginX-Proxy true; в раздел location

5. Не могли бы вы попробовать curl -I http://192.168.17.19:8080/ внутри вашего контейнера nginx. Я подозреваю, что он не может достичь вашего приложения.

Ответ №1:

Используйте эту конфигурацию для сервера Nginx, чтобы использовать Nginx в качестве reverseproxy

 upstream myhost {
    server <docker-container-hostname/IP-address>:<port>
}

server {
    listen        80;
    server_name   myhost.com;

    location / {
        proxy_pass  http://myhost;
    }
}
 

Комментарии:

1. Можете ли вы объяснить, почему это работает там, где версия OP не работает? На первый взгляд он выглядит идентично, за исключением того, что вы используете an upstream , который позволяет вам указывать несколько хостов, и вы опускаете proxy_ директивы. Если это предлагает больше, чем это, это поможет OP и будущим читателям понять различия.

2. Это в основном то же самое с восходящим потоком и без заголовков.

3. Моя проблема не в том, что nginx не работает, он отлично работает при большинстве запросов, но произошел случайный сбой при сбросе соединения.