Сайт по умолчанию NGINX работает, но один на другой порт не работает

Здравствуйте, я использую nginx для настройки двух серверов. один из них является внешним портом 80, а другой — внутренним портом 8080 на одном IP-адресе.

По умолчанию работает один, бэкэнд через порт 8080 выдает мне тайм-аут соединения / нет ответа при попытке доступа к серверу.

Я думаю, что это мое выполнение, однако, чтобы протестировать бэкэнд, у меня есть простой index.php, который должен появиться, если я перейду к xxx.xxx.xxx.xxx:8080 в браузере, за исключением того, что у меня истекло время соединения / нет ответа ,

Nginx говорит, что он открыт и слушает. без номера порта он идет на мой внешний сервер / сервер по умолчанию для этого IP-адреса.

Журналы ошибок ничего не показывают! Даже журналы в моих блоках сервера с доступом и апстримом ничего не показывают.

Убунту 18.04

вот мой конфиг
сервер 1 порт 80 по умолчанию

   server {
# Replace this port with the right one for your requirements
listen 80 default_server;

# Multiple hostnames separated by spaces.  Replace these as well.
server_name www.domain.com domain.com *.domain.com;

root /var/www/my_project/html;

error_page 404 errors/404.php;
#  access_log logs/my_project.ventures.access.log;
access_log  /var/log/nginx/server.intra-upstream.log upstream buffer=16k;
access_log  /var/log/nginx/server.intra-access.log combined buffer=16k;

index index.php index.html index.htm;

# static file 404's aren't logged and expires header is set to maximum age
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
}

location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
# By all means use a different server for the fcgi processes if you need to
fastcgi_pass   127.0.0.1:9000;
}

location ~ /\.ht {
deny  all;
}
}

Это второй сервер, к которому нельзя получить доступ через client.domain2.com или www.domain2.com — URL-адрес правильный, но вместо него отображается htdocs сервера 1. client.domain2.com:8080 или любая другая комбинация приносит Cannot reach site или же Connection Timed out

    server {
# Replace this port with the right one for your requirements
listen 8080;

# Multiple hostnames separated by spaces.  Replace these as well.
server_name client.domain2.com www.domain2.com;

root /var/www/my_project/backend;

error_page 404 errors/404.php;
#  access_log logs/my_project.fun.access.log;
access_log  /var/log/nginx/server.intra-upstream.log upstream buffer=16k;
access_log  /var/log/nginx/server.intra-access.log combined buffer=16k;
index index.php index.html index.htm;

# static file 404's aren't logged and expires header is set to maximum age
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
}

location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
# By all means use a different server for the fcgi processes if you need to
fastcgi_pass   127.0.0.1:9000;
}

location ~ /\.ht {
deny  all;
}
}

3

Решение

Ваша конфигурация верна. Я могу добавить «имя_сервера» для каждого сервера.

Вы должны добавить логирование для каждого виртуального хоста, добавив это к каждому server {} запись:

access_log  /var/log/nginx/server.intra-upstream.log upstream buffer=16k;
access_log  /var/log/nginx/server.intra-access.log combined buffer=16k;

Вы также должны добавить в свой http {} запись для создания журнала работ:

log_format upstream '$remote_addr - $remote_user [$time_local]  $request '
'$upstream_addr $upstream_cache_status $upstream_status $upstream_response_time';

Вы можете проверить журналы запросов в этих файлах. Вверх по течению зарегистрируйте транзакцию с помощью PHP-FPM и получите доступ к HTTP-запросу.

Вы могли бы иметь некоторые iptables блокировка или другое сетевое ограничение.

Чтобы проверить, прослушивает ли ваш сервер порт 8080, используйте эту команду как root:

bash# netstat -nap | grep -i nginx

Это покажет вам что-то вроде этого:

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      939/nginx: master p
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      939/nginx: master p
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      939/nginx: master p
tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17513    939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17512    939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17518    939/nginx: master p
unix  3      [ ]         STREAM     CONNECTED     17519    939/nginx: master p

В моем случае NGiNX прослушивает порты 80, 81, 82 и 443.

Чтобы проверить вас iptables правила, введите:

bash# iptables-save

Я не буду помещать сюда вывод, потому что он может сильно отличаться, и вам просто нужно проверить значение по умолчанию INPUT правило (вверху вывода), вот так:

*filter
:INPUT DROP [67342:4090666]

В моем случае, INPUT по умолчанию DROP, Если вы видите ACCEPT там все в порядке, в противном случае вам нужно проверить, есть ли какое-либо явное правило, принимающее пакеты через порт 8080.

Если вы INPUT как DROP, вы можете проверить, если это ваша проблема с открытием порта 8080 с помощью этой команды:

bash# iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
0

Другие решения

Я проверил вашу конфигурацию, и она мне кажется правильной. Некоторые вещи, которые приходят мне в голову, могут вызвать неожиданное поведение, которое вы испытываете:

  • Как уже говорили другие, вы перезапустили nginx после создания последнего файла conf? Я знаю, это звучит глупо, но я забыл делать это сам много времени.
  • Проблемы с разрешениями или неправильный путь для root доменная директива. Вы уверены, что каталог файлов www.domain2.com существует и / или доступен для чтения www-data / ваш пользователь nginx?
  • Проверьте свой DNS. Вы не забыли добавить www.domain2.com и другой домен в файл hosts (конечно, при условии, что вы работаете над своей собственной коробкой)? Ваши домены доступны через ping или telnet?
  • Попробуйте проверить свой синтаксис, sudo nginx -t, Это говорит что-то интересное?
0

как вы сказали:

доступ и восходящий поток ничего не показывают

так что правда в другом: посмотрите на свой брандмауэр. если вы используете AWS, посмотрите на свою конфигурацию VPC (подсеть, nacl, группа безопасности).

На стороне nginx это выглядит нормально, по крайней мере, вы должны иметь доступ к журналу при указании на index.php. Если вы хотите увидеть журнал ваших статических файлов, вы должны прокомментировать строку

access_log off;

(только для тестирования, вернуть его с производства).

0
По вопросам рекламы [email protected]