nginx绑定SSL证书
1、服务器环境
centos7.9、docker
docker下nginx已经部署并启动,监听80及443端口。
nginx多域名绑定已经测试完成,参考我另外一个文章 nginx 绑定多个域名
ssl证书已经申请完成,参考我另外一个文章 阿里云免费SSL证书申请
ps:本次所用环境及nginx配置文件都是沿用 nginx 绑定多个域名,但是由于此次需要443端口,所以我重新运行了新的容器,以便监听443端口
2、配置
2.1 nginx.conf文件
我只申请了test1.xxxxx.cn的证书,所以配置文件我也只配置了这个证书。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;#端口
server_name localhost;#访问地址、域名
location / { #匹配访问url规则
root /usr/share/nginx/html/html/; #指向路径 实际访问路径为 D:/t2/html/myhtml/ 两个拼接的
}
}
# 配置 server
server {
listen 80;
server_name xxxxx.cn test1.xxxxx.cn; # 支持 www 和 non-www 两种访问方式
location / {
proxy_pass http://172.00.000.000:8003; # 将其转发到本地的 8003 端口
}
}
# 配置另一个 server
server {
listen 80;
server_name test2.xxxxx.cn;
location / {
proxy_pass http://172.00.000.000:8004; # 将其转发到本地的 8004 端口
}
}
# 配置ssl server
server {
listen 443 ssl;
server_name test1.xxxxx.cn;
ssl_certificate /etc/nginx/ssl/test1.xxxxx.cn.pem;
ssl_certificate_key /etc/nginx/ssl/test1.xxxxx.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Host $http_host;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# root /usr/share/nginx/html;
# index index.html index.htm;
proxy_pass http://172.00.000.000:8003; # 将其转发到本地的 8003 端口
}
}
}
一般来说如果配置了443,都要把80重定向到443,这个需要在nginx.conf添加一段配置即可
server {
listen 80;
server_name aaa.printy.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
2.2 docker
mkdir -p /data/nginx/ssl
docker run \
--name nginx230829 \
-p 80:80 -p 443:443 \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/www/:/usr/share/nginx/html/ \
-v /data/nginx/logs/:/var/log/nginx/ \
-v /data/nginx/ssl/:/etc/nginx/ssl/ \
-v /data/nginx/conf/:/etc/nginx/conf.d \
--privileged=true -d --restart=always nginx
这块不多说了,就是运行nginx的容器,然后挂载配置文件,其中ssl文件夹在宿主机创建好以后,需要把ssl文件传上来。
2.3 重启nginx
重启以后,访问test1的域名,可以看到证书已经生效。