您好,我正在使用nginx设置两个服务器。一个是一个IP地址上的前端端口80,一个是后端8080。
默认设置有效,后端通过端口8080为我提供了连接超时/尝试访问服务器时无响应。
我认为这是我的执行,但是,要测试后端,我有一个简单的index.php,如果我在浏览器中转到xxx.xxx.xxx.xxx:8080,我会超时,但我会超时/ 没有反应。
Nginx说它是开放的并且正在监听。没有端口号,它将转到该IP地址的我的前端/默认服务器。
错误日志什么也不显示!甚至我服务器上具有访问权限和上游权限的日志也什么也没显示。
ubuntu 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正确,但显示服务器1 htdocs。 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;
}
}
答案 0 :(得分:1)
您必须在防火墙中允许8080端口
如果您尚未安装ufw
,请按以下步骤安装
$ sudo apt install ufw
然后检查ufw状态
$ sudo ufw status
检查所需端口是否已添加到列表中。
然后使用
$ sudo ufw allow 8080
然后再次检查ufw状态。现在,它向您显示允许的ipv4,ipv6端口和连接。重新启动您的nginx服务器并检查端口是否正常
$ sudo systemctl nginx restart
$ curl -I 'http://{youraddress}:8080'
或者在浏览器中点击网址。
如果您使用的是GCP,则AWS会在服务器控制台中检查外部防火墙设置。例如http_server allow80。然后将此记录编辑为80、8080并保存。
警告:请勿在AWS的GCP中使用ufw
进行内部防火墙设置,因为它们已经为引擎提供了自己的防火墙设置。
谢谢
答案 1 :(得分:0)
您的配置正确。我可能会在每个服务器上添加“ server_name”。
您应该将日志记录添加到每个虚拟主机,并将其添加到每个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
答案 2 :(得分:0)
我已经测试了您的配置,对我来说似乎是正确的。我想到的一些事情可能会导致您遇到意外的行为:
root
域指令的权限问题或路径错误。您确定www.domain2.com文件目录是否存在和/或www-data
/您的nginx用户可读吗?sudo nginx -t
。它说有趣吗? 答案 3 :(得分:0)
如您所说:
访问权限和上游什么都不显示
所以,真相却在其他地方:查看您的防火墙。如果您使用的是AWS,请查看您的VPC配置(子网,nacl,安全组)。
在nginx方面,这似乎还不错,至少在指向index.php时必须具有日志访问权限。如果要查看静态文件的日志,应在行
上添加注释access_log off;
(仅用于测试,将其从生产中退还)。
答案 4 :(得分:-2)
我遇到了同样的问题,如上面评论中所述,原因是防火墙阻止了端口