我有下面的nginx配置文件
server {
listen 80 default_server;
server_name _;
return 301 https://dashboard-test-deb11.company.com$request_uri;
}
server {
server_name dashboard-test-deb11;
return 301 https://dashboard-test-deb11.company.com$request_uri;
}
server {
listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
server_name dashboard-test-deb11.company.com;
ssl_certificate /etc/nginx/certificates/certnew.crt;
ssl_certificate_key /etc/nginx/certificates/server.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
当用户输入URL“dashboard-test-deb 11/”时,我想将他们重定向到“https://dashboard-test-deb11.company.com“,但由于某种原因,它只提供localhost:3000,如块3所述。
我有两个疑问:
1.为什么第二个块不适用于URL“dashboard-test-deb 11/”
1.为什么第三块能用?我在该块中提到了“server_name dashboard-test-deb11.company.com“,但它仍然适用于“dashboard-test-deb 11/”
2条答案
按热度按时间neekobn81#
为什么第二个块不适用于URL“dashboard-test-deb 11/”
listen
参数没有为第二个块定义假设您已正确设置DNS记录,此操作应该有效。
为什么第三块能用?我在该块中提到了“server_name dashboard-test-deb11.company.com“,但它仍然适用于“dashboard-test-deb 11/”
设置
default_server
参数。Nginx会将任何不匹配任何其他服务器块server_name
参数的请求转发到default_server
块,而不管该块中定义的server_name
。由于您的第二个服务器块没有侦听端口443,因此发出的任何https请求都将发送到第三个块
你可以阅读更多关于如何在Nginx here中处理请求的信息
x7yiwoj42#
为了使第二个块按预期工作,您应该包含一个
location
块,它定义如何处理此server_name
的请求。举例来说:
第三个服务器块正在工作,因为它有一个
server_name
指令设置为“dashboard-test-deb11.company.com“。