目录
- 一、服务器规划
- 二、执行步骤
- 2.1 自签证书
- 2.2 Nginx 配置
- 三、验证
一、服务器规划
OS | server | 备注 |
---|---|---|
CentOS7.8(10.20.10.62) | nginx_1.13.7 openssl_1.0.2 gcc_4.8.5 | 80 —>443 80<—>443 |
资源包下载:
openssl
gcc
二、执行步骤
2.1 自签证书
1、服务安装
相关资源的具体安装步骤我之前的博文有过介绍,可参考《Nginx七层负载均衡规划及部署》。重点不在于安装,在于如何实现 http 转 https,或两者之间均可访问。
2、生成 rsa 私钥
输入用户名、密码、邮箱等(可自定义,但需注意格式)
openssl genrsa -des3 -out server.key 1024
3、生成 csr 证书签名申请文件
openssl req -new -key server.key -out server.csr
4、输出无加密的私钥
这里之所以输出无加密的私钥,是为了避免每次 reload 时都需要输入密码,很麻烦。
openssl rsa -in server.key -out server_test.key
5、生成 crt 证书
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
# 证书有效期10年,可自定义
2.2 Nginx 配置
1、直接 443
server {
listen 443 ssl;
server_name 10.20.10.62; # IP或域名
ssl_certificate /usr/local/nginx/key/server.crt; # 证书路径
ssl_certificate_key /usr/local/nginx/key/server_test.key; # 私钥路径
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
client_max_body_size 50M;
client_body_buffer_size 2M;
location / {
root /data/web/ssl_test/;
index index.html index.htm;
try_files $uri $uri/ @router;
}
}
2、80 转 443
server {
listen 443 ssl;
server_name 10.20.10.62; # IP或域名
ssl_certificate /usr/local/nginx/key/server.crt; # 证书路径
ssl_certificate_key /usr/local/nginx/key/server_test.key; # 私钥路径
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
client_max_body_size 50M;
client_body_buffer_size 2M;
location / {
root /data/web/ssl_test/;
index index.html index.htm;
try_files $uri $uri/ @router;
}
}
server {
listen 80;
server_name 10.20.10.62;
rewrite ^(.*)$ https://$host$1 permanent;
}
注意:
listen 443
这种写法支持新版本而不支持老版本的,所以我使用了listen 443 ssl
。
echo "80-->443" >> /data/web/ssl_test/index.html
3、80/443 均可访问
server {
listen 80;
listen 443 ssl;
server_name 10.20.10.62; # IP或域名
ssl_certificate /usr/local/nginx/key/server.crt; # 证书路径
ssl_certificate_key /usr/local/nginx/key/server_test.key; # 私钥路径
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
client_max_body_size 50M;
client_body_buffer_size 2M;
location / {
root /data/web/ssl_test/;
index index.html index.htm;
try_files $uri $uri/ @router;
}
}
这种方法就是在一个 server 里面同时监听 80 和 443 两个端口。
echo "80<-->443" >> /data/web/ssl_test/index.html
三、验证
1、80 转 443
http://10.20.10.62/ (访问 http 时,跳转到 https)
https://img-blog.csdnimg.cn/20210713161257240.png#pic_center" alt="在这里插入图片描述" />
2、80/443 均可访问
http://10.20.10.62/(正常访问 http)
https://10.20.10.62/(正常访问 https)
https://img-blog.csdnimg.cn/20210713161933180.png#pic_center" alt="在这里插入图片描述" />
注意:
https 需 Nginx 添加http_ssl_module
模块,关于 Nginx 如何添加模块,大家可参考我之前的博文《Nginx实现平滑升级》。