在阿里云上申请了一个免费的ssl证书,想将其布置到网站上,但出现了连接被拒绝的情况
好,开始查找问题所在
在网上开始搜索相似的问题逐一排查
服务器上443端口肯定是放开的,检查了防火墙也没问题,那么最有可能的就是在nginx.conf的配置上了
这是部分配置
server {
listen 443 ssl ;
listen [::]:443 ssl ;
server_name xxx.xyz;
# root /usr/share/nginx/html;
#
ssl_certificate /etc/nginx/conf/cref/xxx.xyz.pem;
ssl_certificate_key /etc/nginx/conf/cref/xxx.xyz.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
#
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location /static {
alias /data/www/test/static;
}
location / {
proxy_pass http://localhost:5000; # Flask 应用运行在本地的 5000 端口
proxy_set_header Host $host; # 传递原始的 Host 头部信息
proxy_set_header X-Real-IP $remote_addr; # 传递客户端的 IP 地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 传递原始的请求协议(http/https)
}
# }
}
server {
listen 80;
listen [::]:80;
server_name xxx.xyz;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
rewrite ^(.*)$ https://$host$1;
location / {
index index.html index.htm;
}
}
反反复复检查了很多遍,查看了各个帖子里出现的各种问题,还是没有发现问题的所在
在nginx的error日志里也没有发现异常
但是有一个让我很在意的点就是:我使用默认的http是可以正常访问网站的
在这之前我一至是使用的http协议也就是默认的80端口来访问网站
而在我申请完ssl证书后就开始使用上面的80端口跳转到443端口的方案,在更改完配置之后重新启动nginx就出现了上述https被拒绝的情况,但是,在重新启动后使用http应该自动转到https才对,之前一直认为是配置出现了错误,
苦苦寻找无果后我想到了一种可能:会不会更改的配置根本就没有生效,nginx一直使用的是之前的配置
然后我敲了一个之前一直没敲过的命令
sudo nginx -s reload
这个命令会告诉 Nginx 重新读取配置文件,而不会中断正在进行的连接。
然后它给我返回了下面这个错误
nginx: [emerg] "rewrite" directive is not allowed here in /etc/nginx/nginx.conf:102
什么??命令不在正确位置?
我再去重新仔细审视了一下我的配置文件,终于发现了这个困扰了我一个多小时的的问题所在:
- 在经过多次大大小小的更改后,我的配置文件依旧比较乱了,在某个角落一个** } ** 右括号被我注释掉了,导致rewrite命令在这之前就被挡在了外面
真相大白,困扰了我一个小时的问题竟然在这!
原来,之前每次更改完配置之后都是直接关闭nginx再开启,可能更改的配置并不正确,但是并没有提示,而nginx发现问题后使用了之前的配置。
因为第一次接触这个东西,对Nginx并不熟悉,才导致了这次的笑话,在此记录一下,引以为戒
最后贴两个命令
sudo nginx -s reload
这个命令会告诉 Nginx 重新读取配置文件,而不会中断正在进行的连接。
sudo nginx -t
这个命令会检查配置文件是否有语法错误,但不会应用更改。