操作系统:Ubuntu 18.04,Nginx版本:1.14.0,Asp.net版本:core 3.1
长话短说:
- 无法从linux机箱外部访问端口5001。但可以在里面打
- Nginx正在通过请求,但它没有到达web应用程序
- 同一服务器上同一nginx下的另一个网站正在运行
部署后,它停止工作。当我访问https://example.com,Nginx向https://www.example.com:5001/.我的浏览器无法访问它,说";看起来www.mywsite.com关闭了连接;。部署只改变了
wget https://localhost:5001 --no-check-certificate
因此,在web应用程序看来,它将响应对端口5001的请求。但不知何故,请求并没有从Nginx发送到应用程序。
与Nginx托管在同一服务器上的另一个网站(在端口5050上侦听(具有几乎相同的配置,在浏览器上运行良好(接收代码200而不是307(。
我已经重新启动了web服务器,重新启动了dotnet web应用程序,重新加载了nginx。什么都没用。
以下是";mysite":
server {
large_client_header_buffers 4 32k;
server_name example.com www.example.com;
location / {
proxy_pass http://mysite;
proxy_http_version 1.1;
root /var/www/mysite/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded_Proto $scheme;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
upstream mysite{
zone dotnet 64k;
server 127.0.0.1:5000;
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
large_client_header_buffers 4 32k;
listen *:80;
server_name example.com www.example.com;
return 404; # managed by Certbot
}
当我通过dotnet列出所有的监听服务时,有趣的是,工作网站只监听5050:
tcp 0 127.0.0.1::5050 0.0.0.0:*LISTEN 1654/dotnet
tcp 0 127.0.0.1:5000 0.0.0.0:*LISTEN 5510/dotnet
tcp 0 127.0.0.1:5001 0.0.0.0:*LISTEN 5510/dotnet
tcp 0 127.0.0.1:40678 127.0.0.1:3306建立1654/dotnet
tcp6 0 0::1:5050:::*LISTEN 1654/dotnet
tcp6 0 0::1:5000::*LISTEN 5510/dotnet
tcp6 0 0::1:5001:::*LISTEN 5510/dotnet
nginx access.log的尾部:
(我的IPv4地址(-[2022年5月5日1:15:17:55-0400]";GET/HTTP/1.1";3070〃-"quot;Mozilla/5.0(Windows NT 10.0;Win64;x64(AppleWebKit/537.36(KHTML,类似Gecko(Chrome/90.4430.85 Safari/537.36 Edg/90.0.818.46";
nginxerror.log的尾部(我确实找到了几个小时前的一些条目,但最近的故障没有创建条目(:
2021/05/05 12:03:11[error]5481#5481:*187过早上游从上游读取响应标头时关闭连接,客户端:{我的IPv4地址}26,服务器:example.com,请求:";GET/HTTP/1.1";,上游:";http://127.0.0.1:5001/",主机:";example.com";
如有任何帮助,我们将不胜感激。非常感谢。
在您的配置中,我只看到您正在设置侦听指令的3个区域。首先,所有接口上的443个globs每个默认值为"0";侦听443 ssl";。然后引导它在127.0.0.1端口5000上侦听,然后在端口80上glob。在所有这些中,你都没有告诉它在端口5001上侦听,但也许nginx会自动做到这一点?如果是这样的话,那么很可能你的";监听127.0.0.1:5000";应该是";听*:5000";因此,它会在您的所有接口(ipv4和ipv6(上进行glob。