我在我的nginx配置中有三個不同的proxy_pass。其中兩個重定向到https主機,最後一個通過標準端口80.Nginx proxy_pass重定向到錯誤的域
兩個第一個(example.com
和proxmox.example.com
)工作正常。
但問題是關於第三個。 http://blog.example.com
重定向到https://example.com
,我不明白爲什麼。
如果有人有一個想法...我是nginx的新手,我仍然難以理解帶或不帶SSL的proxy_pass。
這是我的配置。
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80;
server_name example.com proxmox.example.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_redirect off;
location/{
proxy_pass https://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 443;
server_name proxmox.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_redirect off;
location/{
proxy_pass https://localhost:8006;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name blog.example.com;
proxy_redirect off;
location/{
proxy_pass http://10.0.0.3:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
感謝
編輯
我已經在Nginx的文檔閱讀。這可能是問題的原因。
使用此配置,瀏覽器將接收默認服務器的證書,即www.example.com,而不管所請求的服務器名稱如何。這是由SSL協議行爲造成的。 SSL連接在瀏覽器發送HTTP請求之前建立,而nginx不知道請求的服務器的名稱。因此,它可能只提供默認服務器的證書。
Link: see in Name-based HTTPS servers
只是一個猜測:是否正確設置了「blog.example.com」的DNS-A條目?可能它指向一個錯誤的目標IP .. – semm0
也許這就是'10.0.0.3:80'所做的。 –
事實上,我在裝有proxmox的主機上。所以'localhost'是主要的主機,'10.0.0。*'是proxmox容器......所以10.0.0.3是我的proxmox容器之一。對於DNS,它應該沒問題,因爲我的容器正在使用主機DNS信息。 –