我使用NginX在单个主机上有2个域:
在80和443端口上均具有SSL(Python后端)功能的完整服务器。
只需重定向到另一个域,无需SSL。
在不同的server
文件的.conf
部分中对它们进行了描述:
1。
server {
listen 80;
listen 443 ssl;
server_name verni-verni.ru www.verni-verni.ru;
# Certificates
ssl_certificate /var/www/SSL/ca.crt;
ssl_certificate_key /var/www/SSL/private.key;
# Logs
...
# Static Content
...
# Reverse Proxy
location / {
...
}
}
2。
server {
listen 80;
# listen 443;
server_name gdeclient.ru;
rewrite ^/(.*)$ http://... redirect;
}
如果我仅为第二个域设置80端口,则它不会重定向HTTPS连接。
但是,如果我还为第二个域设置了443端口(没有SSL),那么端口443对于第一个域不起作用,我得到了the following error:
在SSL握手时服务器监听SSL端口时未定义“ ssl_certificate”
如果第二个重定向服务器的域名不同,为什么第二个重定向服务器会影响第一个重定向服务器?
是否可以在不使用SSL且不影响第一台服务器的情况下为第二台服务器设置HTTPS重定向?
答案 0 :(得分:1)
回答您的问题:
Nginx接受端口443上的连接,然后需要确定要使用哪个服务器来处理它。请参见how Nginx processes a request和Server Name Indication。
如果您没有用于第二个域的证书,那么即使浏览器不抱怨该证书,您也将无法接受该域的HTTPS连接-即使您只想将其重定向到其他地方。
如果仅想防止与第二个域的HTTPS连接被第一个域错误处理,只需将listen 443 ssl;
添加到第二个域,然后使ssl_certificate
语句成为全局语句,或重复它们在第二个server
块中。
答案 1 :(得分:1)
如果第二个重定向服务器的域名不同,为什么第二个重定向服务器会影响第一个重定向服务器?
因为在浏览器发送HTTP请求之前,SSL握手和连接已建立,nginx不知道所请求服务器的名称。在您的情况下,所有端口443请求的请求都将转到默认服务器块(第二服务器块),找不到ssl_certificate配置并抱怨。
如果将ssl_certificate声明设为全局,则它将正确地将其重定向到第一个服务器块。