1、检查 Nginx 是否支持 SSL 模块
首先,检查当前安装的 Nginx 是否支持 SSL 模块。运行以下命令:
nginx -V 2>&1 | grep -o with-http_ssl_module
如果输出为空,说明 Nginx 没有编译 SSL 模块。
2. 重新编译 Nginx 以启用 SSL 模块
如果你没有安装源代码,可以从 Nginx 官方网站下载源代码包并重新编译。
下载 Nginx 源代码
cd /usr/local/src
wget http://nginx.org/download/nginx-1.21.3.tar.gz
tar -zxvf nginx-1.21.3.tar.gz
cd nginx-1.21.3
安装依赖
确保安装了必要的依赖项,包括 OpenSSL 和开发工具:
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
配置并编译 Nginx
./configure --with-http_ssl_module --prefix=/usr/local/nginx
make
sudo make install
3、秘钥证书文件放置路径:
sudo mkdir -p /etc/nginx/ssl
sudo cp star_baidu_com.crt /etc/nginx/ssl/
sudo cp star_baidu_com.key /etc/nginx/ssl/
4、修改 /usr/local/nginx/conf/nginx.conf
在 http 块中添加或修改以下内容:
http {
# 其他配置...
#保留请求头里的字段下划线 因Nginx存在过滤下划线的问题
underscores in headers on;
server {
listen 80;
server_name www.baidu.com;
# 重定向 HTTP 请求到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name www.baidu.com;
ssl_certificate /etc/nginx/ssl/star_baidu_com.crt;
ssl_certificate_key /etc/nginx/ssl/star_baidu_com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 需要修改IP地址
proxy_pass http://172.16.222.1222:8089;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
5、测试 Nginx 配置
在重新启动 Nginx 之前,先测试配置文件是否正确:
sudo /usr/local/nginx/sbin/nginx -t
6、重启 Nginx
如果配置文件没有问题,重启 Nginx 以应用更改:
sudo /usr/local/nginx/sbin/nginx -s reload
7、验证 SSL 配置
打开浏览器,访问 https://www.baidu.com,确保连接是安全的,并且没有 SSL 警告。
8、注意事项
确保防火墙允许 443 端口的流量。
使用 iptables
查看现有规则(可选)
sudo iptables -L -n -v
添加规则以允许443端口的流量:
允许入站TCP流量(假设你使用的是IPv4):
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
如果你还希望允许IPv6流量:
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
保存规则:
对于基于Debian的系统(如Ubuntu),你可以使用iptables-save和iptables-restore:
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
sudo sh -c "ip6tables-save > /etc/iptables/rules.v6"
对于基于Red Hat的系统(如CentOS、Fedora),你可以使用service iptables save(这取决于你的系统配置):
你需要确保 /etc/iptables/ 目录存在。如果目录不存在,你可以创建它:
sudo mkdir -p /etc/iptables/
一旦目录存在,你就可以再次尝试使用 iptables-save 命令来保存规则:
sudo iptables-save > /etc/iptables/rules.v4
sudo iptables-save > /etc/iptables/rules.v6
如果使用 Let's Encrypt 证书,建议使用 Certbot 工具自动管理证书的获取和续期。