Centos Docker Nginx配置https

如何安装Nginx参考:

Centos Docker安装Nginx

需求:
Docker Nginx环境,为www.beimapro.com和api.beimapro.com配置https安全证书。当访问www.beimapro.com时自动跳转到https://www.beimapro.com

实现:
我这里使用的是UCloud的云服务器,阿里云、腾讯云也类似,关于域名或云服务器如何购买,如何配置,这里略过。

nginx目录结构为:
nginx目录结构

为了配置简洁与方便维护,把不同的域名单独新建.conf文件。通过nginx.conf加载conf.d下所有后缀为*.conf的文件,如下图:
nginx.conf基础配置

其中,api.beimapro.com为接口程序的nginx配置,www.beimapro.com为某科技公司官网的nginx配置。如下图:
conf.d下所有nginx配置文件
通过在平台购买的域名,可申请免费的https证书,有效期一年。申请下来后得到两个证书,分别为: public.pem和private.key。把它上传到服务器上,注意要上传到nginx映射的路径。
在这里插入图片描述

官网:www.beimapro.com.conf,写两个server,分别监听80端口和443端口,配置如下:

server {  
    listen       80;  
    server_name  localhost www.beimapro.com beimapro.com; 
    rewrite ^(.*) https:$host$1 permanent;  #访问80端口自动跳转443端口
   
    location / {  
        root   /usr/share/nginx/html/website;  #这里要写docker中的地址
        index  index.html index.htm;  
    }  
  
    error_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   /usr/share/nginx/html;  
    }    
}

server {
        listen       443;
        server_name  localhost www.beimapro.com beimapro.com;
        ssl on; #开启ssl

        ssl_certificate      /usr/share/nginx/html/https/www/public.pem; #注意地址路径
        ssl_certificate_key  /usr/share/nginx/html/https/www/private.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_prefer_server_ciphers  on;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配
        ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配
        location / {
            root   /usr/share/nginx/html/website;
            index  index.html index.htm;
        }
    }

接口api.beimapro.com.conf配置一个server,配置如下:

server {  
    listen 80;  
    listen 443 ssl; #开启443
    server_name  api.beimapro.com;  

    #rewrite ^(.*) https:$host$1 permanent;
  
    ssl_certificate      /usr/share/nginx/html/https/api/public.pem;
    ssl_certificate_key  /usr/share/nginx/html/https/api/private.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_prefer_server_ciphers  on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配
    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配
 
    location / {  
        root   /usr/share/nginx/html;  
        index  index.html index.htm;  
        #autoindex  on;  
        #try_files $uri /index/index/page.html;  
        #try_files $uri /index/map/page.html;
            # 允许跨域请求的“域”
        add_header 'Access-Control-Allow-Origin' $http_origin;
        # 允许客户端提交Cookie
        add_header 'Access-Control-Allow-Credentials' 'true';
        # 允许客户端的请求方法
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
        # 允许客户端提交的的请求头
        add_header 'Access-Control-Allow-Headers' 'Origin, x-requested-with, Content-Type, Accept, Authorization';
        # 允许客户端访问的响应头
        add_header 'Access-Control-Expose-Headers' 'Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma';
        # 处理预检请求
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        } 

    }


   #以下为内部跳转
   # 认证服务
    location /baidu-auth-server {
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.2.1:10001/;
    }

# CSS服务
    location /baidu-css-server {
        #root   html;
        #index  index.html index.htm;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.2.2:10002/;
    }

# 聊天服务
    location /baidu-css-webchat-service {
        #root   html;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_pass http://127.0.2.3:10003/;
    }

    #对外API
    location /baidu-css-api {
        #root   html;
        #index  index.html index.htm;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_pass http://127.0.2.4:10004/;
    }
}

常见问题:

  • 域名不管是一级还是二级域名均需要单独申请证书。
  • 若配置完成且启动nginx无异常仍然无法使用https访问时,请检查docker是否开放443端口。
  • 通过 lsof -i:443 查看是否有443进程,若无说明https没有开启或生效。或通过telnet 127.0.0.1 443 查看是否OK。
  • 配置完成后记得docker restart nginx重启nginx以及docker logs -f nginx查看配置是否有异常。
  • 要注意你的nginx是否安装SSL模块,Docker通过docker exec -it nginx bash 进入到nginx执行nginx -V查看,若不是Docker安装的Nginx则进入到sbin目录执行./nginx -V查看,如下图:
    检查是否安装nginx ssl模块
    最终效果:
    官网:访问www.beimapro.com会自动跳转到https://www.beimapro.com
    www.beimapro.com

API:访问api.beimapro.com时不会自动跳转到https://api.beimapro.com,均可单独访问。
https://api.beimpro.com

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值