准备工作
正式开始
登录ECS服务器控制台(SSH),上传pem证书(fullchain.cer - 证书文件)和pem私钥(cert.key - 私钥文件)至 /tmp/ 文件夹。
#文件名......文件作用
#fullchain.pem......包括了cert.pem和chain.pem的内容
#privkey.pem......证书的私钥
sudo mv /tmp/fullchain.pem /../nginx/ssl/fullchain.pem
sudo mv /tmp/privkey.pem /../nginx/ssl/privkey.pem
#由于开通ECS服务器时为配置root账号,故需要使用sudo 命令进行提权操作,下同。
#*.pem 文件的文件名称需按实际情况替换
#nginx反代理目录需按实际情况更改
打开 /../Nginx/conf.d/halo.conf文件,或者先备份原始文件以便后期恢复。
sudo vim /../nginx/conf.d/halo.conf
sudo cp /../nginx/conf.d/halo.conf /../nginx/conf.d/halo.conf.bak
找到listen 443(即监听443端口)相关语句,如下所示,并修改(原代码为注释掉的,将前面的【#】删除即可),若无ipv6访问需求,则可以不用修改第二行(即:#listen [::]:443 ssl http2 default_server;)。
#listen 443 ssl http2 default_server;
#listen [::]:443 ssl http2 default_server;
#if ($scheme = http) {
# return 301 https://$host$request_uri;
#}
#ssl_certificate /etc/nginx/ssl/fullchain.pem;
#ssl_certificate_key /etc/nginx/ssl/privkey.pem;
修改后如下所示:
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
if ($scheme = http) {
return 301 https://$host$request_uri;
}
#根据实际情况修改fullchain.pem文件和privkey.pem文件的存储路径即可
ssl_certificate /../nginx/ssl/fullchain.pem;
ssl_certificate_key /../nginx/ssl/privkey.pem;
完成修改后,保存 halo.conf 文件并退出,然后重启ECS服务器。
Error Code
502(Bad Gateway)报错
NGINX 配置问题
proxy_pass 指令错误
检查 proxy_pass 指令的配置,确保它指向正确的后端服务器地址和端口。例如:
proxy_pass http://backend_server_ip:backend_server_port;
错误的 IP 或端口将导致 NGINX 无法连接到后端服务器。
协议不匹配
如果后端服务器使用 https 而 proxy_pass 指令使用 http,或者反之,可能会导致 502 错误。
确保协议匹配,例如:
proxy_pass https://backend_server_ip:backend_server_port;
缓存问题
缓存服务器(如 Redis 或 Memcached)可能出现问题,如果后端应用使用它们进行缓存。
检查缓存服务器的状态和配置,确保其正常运行。可以尝试暂时绕过缓存进行测试,看是否解决 502 错误。
出现提示“ERR_TOO_MANY_REDIRECTS”
检查 proxy_set_header 配置
确保在 NGINX 的
proxy_set_header
指令中正确设置了Host
头。如果设置错误,可能会导致后端服务器认为请求来自错误的域名,从而将请求重定向到一个不正确的位置,引发循环。例如,正确的配置可能是:
proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr;
这里
$host
变量包含了客户端请求中的原始主机名。如果将Host
头设置为其他值,可能会导致重定向问题。
检查 proxy_pass 和 rewrite 规则
当
proxy_pass
指令和rewrite
规则一起使用时,可能会出现意外的重定向。假设你有一个
rewrite
规则,它将请求的 URL 路径进行了修改,并且proxy_pass
指向的后端服务器期望的路径格式与rewrite
后的路径不匹配,这可能会导致后端服务器发出重定向请求,而 NGINX 又会继续按照配置进行处理,从而形成循环。例如,以下是一个可能导致问题的错误配置:
location /app {
rewrite ^/app/(.*)$ /$1 break;
proxy_pass http://backend;
}
如果后端服务器在接收到没有
/app
前缀的请求时,会重定向到带有/app
前缀的 URL,就会出现循环重定向。正确的做法可能是调整rewrite
规则或者在代理请求到后端服务器时,正确处理路径相关的问题。
附录
vi/vim 命令使用方法如下:
简介
vi 是 Unix 系统中最基本的文本编辑器,vim 是 vi 的增强版本,它们功能强大,具有丰富的编辑和配置选项。
用法
打开文件
在终端中输入vim 文件名
,例如vim test.txt
,即可打开名为 test.txt 的文件。
进入编辑模式
按下i
键(insert 的缩写),即可进入插入模式,此时可以在光标所在位置输入和编辑文本。
保存并退出
按下Esc
键退出编辑模式,输入:wq
(write quit 的缩写)并回车,即可保存文件并退出 vim。如果不想保存修改,可输入:q!
强制退出。