我有一个像这样的 nginx 配置 第一区块:
server {
listen 80;
server_name abcd.info;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2 default_server;
server_name abcd.info;
root /srv/www/abcd; ## <== Your only path reference.
#ssl on;
.....
.....
}
第二区块
server {
listen 80;
server_name tapash.ddns.com;
root /srv/www/ddns.com;
index index.php;
......
....
}
对于第一个网站,我想永久通过 HTTPS 进行设置。我面临的问题是通过 HTTP 为第二个网站提供服务。但每次它都会自动重定向到 HTTPS 并获取第一个网站的 SSL 证书。我尝试调整配置但似乎没有什么不同。有人能解释一下吗?
答案1
site1.example.net
server {
listen 192.168.1.1;
server_name site1.example.net;
root /vhosts/site1/public_html;
location / {
add_header X-DEBUG "HTTP:[site1.example.net]" always;
}
}
site2.example.net
server {
listen 192.168.1.1:80;
server_name site2.example.net;
return 301 https://$host$request_uri;
add_header X-DEBUG "HTTP:[site2.example.net]" always;
}
server {
listen 443 ssl hhtp2;
server_name site2.example.net;
root /vhosts/site2/public_html;
ssl_certificate /etc/pki/nginx/server.crt;
ssl_certificate_key /etc/pki/nginx/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:!RC4:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK';
ssl_prefer_server_ciphers on;
add_header X-DEBUG "HTTPS:[site2.example.net]" always;
}
正常运行,http 上的 site1 没有重定向
# curl -I http://site1.example.net
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Tue, 23 Feb 2016 09:08:37 GMT
Content-Type: text/html
Content-Length: 45
Last-Modified: Tue, 23 Feb 2016 08:54:51 GMT
Connection: keep-alive
ETag: "56cc1e5b-2d"
X-DEBUG: HTTP:[site1.example.net]
Accept-Ranges: bytes
# curl -I http://site2.example.net
HTTP/1.1 301 Moved Permanently
Server: nginx/1.9.11
Date: Tue, 23 Feb 2016 09:08:43 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://site2.example.net/
X-DEBUG: HTTP:[site2.example.net]
# curl -I https://site2.example.net/
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Tue, 23 Feb 2016 09:08:58 GMT
Content-Type: text/html
Content-Length: 45
Last-Modified: Tue, 23 Feb 2016 08:55:02 GMT
Connection: keep-alive
ETag: "56cc1e66-2d"
X-DEBUG: HTTPS:[site2.example.net]
Accept-Ranges: bytes
PS 您的网络浏览器中可能存在一些缓存。您尝试过清除缓存吗?
答案2
您可能在另一个服务器块中使用了服务器块,或者我只是看到了格式错误的块。但真正的问题是您使用的 default_server 标记。删除它。
我建议在 /sites-available/ 文件夹中使用两个单独的文件,分别名为 abcd.info 和 tapash.ddns.com。
您需要将文件放在 /etc/nginx/sites-available/ 文件夹中,然后在 sites-enabled 中创建指向这些文件的符号链接,如下所示:
ln -s /etc/nginx/sites-available/abcd.info /etc/nginx/sites-enabled/abcd.info
ln -s /etc/nginx/sites-available/tapash.ddns.com /etc/nginx/sites-enabled/tapash.ddns.com
最后但非常重要的一点是删除 /etc/nginx/sites-enabled/default
因为在常规 nginx 安装中,这是将被处理的默认文件。并且 /sites-enabled 中的任何文件都将被处理。
如果你在本地主机上操作,请确保你的主机文件中有 tapash.ddns.com 和 abcd.info 的记录