所以我遇到了一个问题,我在其他主机上配置了看似相同的 nginx,但它在一个服务器上工作,而在其他两个服务器上不工作。本质上,尝试通过 https 连接导致 2 台服务器拒绝连接,但另一台服务器工作正常。这显然发生在 nginx 级别,因为请求甚至没有到达 nginx 后面运行的进程,修复 nginx 配置解决了这个问题。
nginx.conf:
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
client_max_body_size 50M;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
站点启用中的端口 80 配置:
server {
listen [::]:80;
server_name [my_domain].com [hostname].[subdomain].com;
location / {
return 301 https://$server_name$request_uri;
}
}
站点启用中的端口 443 配置:
server {
listen 443 default_server ssl;
listen [::]:443 ssl;
server_name [my_domain].com [hostname].[subdomain].com;
ssl_certificate /etc/ssl/certs/nginx/[certname].pem;
ssl_certificate_key /etc/ssl/certs/nginx/[certname]-key.pem;
root /var/www/[document root]/;
index index.html;
location /api {
proxy_pass http://127.0.0.1:[internal port];
}
location /web {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:[internal port];
}
location / {
try_files $uri $uri/ =404;
}
}
最初我listen [::]:443 ssl;
只有 ,它在 host1 上工作,但在 host2 和 host3 上不工作,添加后default_server
host2 和 host3 正常工作。所有三个主机都是通过 saltstack 配置的,我几乎不需要交互就可以设置它们,我能想到的主机之间的唯一区别是 host1 和 2 与 host3 属于不同的提供商,这显然不是问题所在。我可能错过了什么,导致这些主机不同,从而需要不同的配置。
编辑:记得检查你的版本,我是个白痴
答案1
始终存在一个默认服务器。该default_server
选项仅允许您选择默认服务器,而不是nginx
选择它。如果每个服务器上的文件名不同,则评估它们的顺序可能会不同 - 这意味着nginx
可能在每个服务器上使用不同的server
块作为默认块。
看这个文件了解更多信息。