Здравствуйте, я использую 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;
}
}
Ваша конфигурация верна. Я могу добавить «имя_сервера» для каждого сервера.
Вы должны добавить логирование для каждого виртуального хоста, добавив это к каждому 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
Я проверил вашу конфигурацию, и она мне кажется правильной. Некоторые вещи, которые приходят мне в голову, могут вызвать неожиданное поведение, которое вы испытываете:
root
доменная директива. Вы уверены, что каталог файлов www.domain2.com существует и / или доступен для чтения www-data
/ ваш пользователь nginx?sudo nginx -t
, Это говорит что-то интересное? как вы сказали:
доступ и восходящий поток ничего не показывают
так что правда в другом: посмотрите на свой брандмауэр. если вы используете AWS, посмотрите на свою конфигурацию VPC (подсеть, nacl, группа безопасности).
На стороне nginx это выглядит нормально, по крайней мере, вы должны иметь доступ к журналу при указании на index.php. Если вы хотите увидеть журнал ваших статических файлов, вы должны прокомментировать строку
access_log off;
(только для тестирования, вернуть его с производства).