nginx第一次设置https遇到的问题
博主是从最原始的nginx接收http数据改成https,并把http请求跳转成https,第一次小白把会遇到的问题都踩了一遍,现在把问题记录下来。
这是博主最初的nginx设置:
# 默认nginx配置文件地址/etc/nginx/nginx.conf
server {
listen 80;
server_name localhost;
}
第一个坑:localhost
最初只是为了网站挂上服务器能够正常访问就没有深究其特性;
localhost的特性是捕获所有对本服务器此端口的数据请求,即是网站域名的各级请求加上服务器公网IP请求(浏览器输入IP可访问网站),所以当server_name设置了localhost,则该端口其它网址区别设置都将变的无意义。
第二个坑:网站DNS解析设置
开始博主只设置了“”星号记录,www.网址.com和其它abc.网址.com的二级域名都能访问,以前访问也没觉得,这次改https就出问题了独独“网址.com”就是访问跳转不正确, DNS设置也不是即时生效,检查问题费了不少时间。
在没特殊二级域名需求下设置三种记录值,分别是www、@、()星号,将三种域名请求都正确导向服务器。
注:申请https的SSL证书时,阿里云自动生成了一段记录值,这可能也是自己错误设置的记录值,加上生成的,搞乱了布设条序。
第三个坑:浏览器(chrome)
谷歌浏览器有DNS跳转缓存或者网站跳转缓存,在修改好新的域名跳转逻辑后,浏览器还是记忆原来的网址跳转,博主想来想去怎么也找不到不对的,想不通啊,最后还是换浏览器火狐试了才发现问题的,所以浏览器的智能记忆在检查信息更改时容易让人无厘头。。
就这上面三个坑,让一个问题是变的复杂化,在第一次尝试,知识还不够全面小白的时候,可能改对了一边,没成功再改回错的,来来去去,弄的自己都风中凌乱了。
以下是解决以上问题后完整的server设置,https反而是最容易的,申请证书-上传服务器-启用配置就完成了(不要忘了打开服务器443端口)。
利用301重定向将http 80端口的请求和https 433端口“网址.com”请求都导向https 433端口的www的网站服务上。
server {
listen 80;
// 保留了localhost就只是不漏掉IP访问
server_name 网址.com www.网址.com localhost;
return 301 https://www.网址.com$request_uri;
}
server {
listen 443;
server_name 网址.com;
return 301 https://www.网址.com$request_uri;
}
server {
# charset utf-8;
listen 443 default_server ssl;
server_name www.网址.com;
ssl on;
#从云服务商获取到的第一个文件的全路径
ssl_certificate /etc/ssl/1_网址.com.pem;
#从云服务商获取到的第二个文件的全路径
ssl_certificate_key /etc/ssl/2_网址.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /media {
alias /home/web/media;
}
location /static {
alias /home/web/static;
}
location / {
}
}