Nginx实现ssl一级二级域名证书部署并用https访问代理转发服务器
Posted rysinal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx实现ssl一级二级域名证书部署并用https访问代理转发服务器相关的知识,希望对你有一定的参考价值。
1. 规划
域名 | 解析IP | nginx代理 |
htpps://www.devcult.com | 47.88.10.155 | |
htpps://auto.devcult.com | 47.88.10.155 | https://www.automa.com |
htpps://www.automa.com | 103.200.200.203 |
本次实验用了2个一级域名,1个二级域名,2个ip地址;实现功能如上图所示,要求全部使用https,并且一级域名实现自动补全www。
2. 前提准备
- 47.88.10.155、103.200.200.203分别部署nginx
- 解析ip分别在域名购买商解析
- ssl证书需要申请3个,分别对应两个一级域名和一个二级域名
3. Nginx 证书部署
两台主机47.88.10.155、103.200.200.203的nginx配置如下:
nginx启动路径:/usr/local/nginx/sbin/nginx
nginx配置文件路径:/usr/local/nginx/conf/nginx.conf
以47.88.10.155为例说明配置ssl证书:
3.1 进入配置文件编辑:
vim /usr/local/nginx/conf/nginx.conf
3.2 .在http节点下下新增或修改:
http { include mime.types; default_type application/octet-stream; #配置https网站配置文件夹 include /usr/local/nginx/conf/sites-enabled/*.conf; ... server { listen 80; #http 带www和不带www的入口 server_name devcult.com www.devcult.com; #可选,这里是把所有http请求全部重定向到https return 301 https://www.devcult.com$request_uri; location / { root html; index index.html index.htm; } ... } }
3.3 .新增网站ssl配置文件夹和配置文件
mkdir /usr/local/nginx/conf/sites-enabled
3.4 证书安装
3.4.1 devcult.com域名配置ssl
把申请的证书下载到服务器上(此处以腾讯云秘钥格式为例,使用亚洲诚信(TrustAsia)证书,其他类似),里面包含:
证书文件1_devcult.com_bundle.crt 、私钥文件2_devcult.com.key
将域名 www.devcult.com 的证书文件1_devcult.com_bundle.crt 、私钥文件2_devcult.com.key保存到同一个目录,本示例在/usr/local/nginx/conf目录下。
新建Nginx根目录下 conf/sites-enabled/www.devcult.com.conf 文件如下:
[[email protected] ~]# cat /usr/local/nginx/conf/sites-enabled/www.devcult.com.conf server { listen 443 ssl; #填写绑定证书的域名 server_name devcult.com; #跳转www:把https://devcult.con 重定向到 http://www.devcult.com return 301 http://www.devcult.com$request_uri; #证书名称,需要跟证书文件名一致 ssl_certificate 1_devcult.com_bundle.crt; ssl_certificate_key 2_devcult.com.key; ssl_session_cache shared:SSL:1m; 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 / { root html; index index.html index.htm; } } server { listen 443 ssl; #填写绑定证书的域名 server_name www.devcult.com; #证书名称,需要跟证书文件名一致 ssl_certificate 1_devcult.com_bundle.crt; ssl_certificate_key 2_devcult.com.key; ssl_session_cache shared:SSL:1m; 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 / { root html; index index.html index.htm; } }
注:这里设置两个server的作用是为了让https://devcult.com 跳转至https://www.devcult.com
配置完成后,先用 sbin/nginx -t 来测试下配置是否有误,正确无误的话,重启nginx。就可以使 https://www.devcult.com
来访问了。
注:
配置文件参数 | 说明 |
---|---|
listen 443 | SSL访问端口号为443 |
ssl on | 启用SSL功能 |
ssl_certificate | 证书文件 |
ssl_certificate_key | 私钥文件 |
ssl_protocols | 使用的协议 |
ssl_ciphers | 配置加密套件,写法遵循openssl标准 |
3.4.2 automa.com域名配置ssl
参考3.4.1
3.4.3 automa.devcult.com域名配置ssl
二级域名 automa.devcult.com 代理跳转 automa.com(或任意IP)配置:
把申请的二级域名证书下载到服务器上(此处以腾讯云秘钥格式为例,使用亚洲诚信(TrustAsia)证书,其他类似),里面包含:
证书文件1_automa.devcult.com_bundle.crt 、私钥文件2_automa.devcult.com.key
将二级域名 automa.devcult.com 的证书文件1_automa.devcult.com_bundle.crt 、私钥文件2_automa.devcult.com.key保存到同一个目录,本示例在/usr/local/nginx/conf目录下。
新建Nginx根目录下 conf/sites-enabled/automa.devcult.com.conf 文件如下:
cat /usr/local/nginx/conf/sites-enabled/automa.devops-cultural.club.conf
server {
listen 443 ssl;
server_name automa.devcult.com;
server_name_in_redirect off;
ssl_certificate 1_automa.devcult.com_bundle.crt;
ssl_certificate_key 2_automa.devcult.com.key;
ssl_session_cache shared:SSL:1m;
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 / {
tcp_nodelay on;
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_pass https://www.automa.com;
}
}
3.5 使用全站加密,http自动跳转https(可选)
对于用户不知道网站可以进行https访问的情况下,让服务器自动把http的请求重定向到https。
在服务器这边的话配置的话,可以在页面里加js脚本,也可以在后端程序里写重定向,当然也可以在web服务器来实现跳转。Nginx是支持rewrite的(只要在编译的时候没有去掉pcre)
在http的server里增加
rewrite ^(.*) https://$host$1 permanent;
或者
return 301 https://www.devcult.com$request_uri;
这样就可以实现80进来的请求,重定向为https了。详情参考3.2
4.测试
输入地址 | 跳转地址 | 证书合法 |
devcult.com | https://www.devcult.com | 合法 |
www.devcult.com | 合法 | |
https://devcult.com | 合法 | |
https://www.devcult.com | 合法 | |
automa.devcult.com |
https://automa.devcult.com 实际访问内容为https://www.automa.com |
合法 |
automa.com | https://www.automa.com |
合法 |
www.automa.com | 合法 | |
https://automa.com | 合法 | |
https://www.automa.com | 合法 |
以上是关于Nginx实现ssl一级二级域名证书部署并用https访问代理转发服务器的主要内容,如果未能解决你的问题,请参考以下文章
一个ip对应多个域名多个ssl证书配置-Nginx实现多域名证书HTTPS