• Nginx 配置多个SSL域名指向不同端口


    Nginx 配置多个SSL域名指向不同端口



    前言

    提示:系统版本ubuntu 16.0.4,以下配置仅供参考

    项目开发过程中,我们同一个服务器都会存放多个项目,每个项目都会有不同的域名地址,因此本文记录如何配置多个域名、多个ssl证书以及http域名自动跳转https域名问题。


    说明:nginx配置文件每行具体是干嘛的就不做介绍了,配置文件的其他配置也不放了,直接介绍使用方法

    1、nginx 配置 多个http域名,多个项目

    代码如下(示例):server_name配置不同项目域名,通过不同代理跳转到指定项目路径

        # 第一个项目
        server {
            listen       80;
            server_name  www.abc.com;     # 网址一
            location / {
                root   html;
                index  index.html index.htm;
    	    proxy_pass http://127.0.0.1:8081/;    # 项目端口号
            }
            error_page   500 502 503 504  /upgrade.html;
            location = /upgrade.html {
                root   html;
            }
        }
    	# 第二个项目
    	server {
            listen       80;
            server_name  www.def.com;   # 网址二
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://127.0.0.1:8082/;   # 项目端口号
            }
            client_max_body_size 50m;
            error_page   500 502 503 504  /upgrade.html;
            location = /upgrade.html {
                root   html;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2、nginx 配置 多个SSL域名指向不同端口

    代码如下(示例):这种情况属于1的升级,对步骤1的两个项目域名进行证书加密。
    监听的端口为443,如何443没开启,百度下如何开启ssl端口,增加如下配置

    	# 第一个项目
        server {
            listen       443 ssl;
            server_name  www.abc.com;   # 域名一
            ssl_certificate      xxxxxxx.pem;
            ssl_certificate_key  xxxxxxx.key;  # 自己申请的ssl证书,以阿里为例直接可以申请免费的
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
            client_max_body_size 50m;
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://127.0.0.1:8081/;
            }
            error_page   500 502 503 504  /upgrade.html;
            location = /upgrade.html {
                root   html;
            }
        }
       	# 第二个项目
    	server {
            listen       443 ssl;
            server_name  www.def.com;   # 域名二
            ssl_certificate      xxxxxxx.pem;
            ssl_certificate_key  xxxxxxx.key;  # 这是www.def.com域名的ssl证书
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
            client_max_body_size 50m;
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://127.0.0.1:8082/;
            }
            error_page   500 502 503 504  /upgrade.html;
            location = /upgrade.html {
                root   html;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    到这里两个项目的证书已经配置完成了,使用 https://域名 已经可以访问,但如果直接使用域名访问,还是http格式的,下面配置一下http自动跳转https

    3、nginx 配置 http域名主动跳转https域名

    代码如下(示例):以第一个项目为例,其他项目按照这个方式改变就可以。
    将第一个项目之前配置的http方式修改一下

    	# 原来第一个项目 http域名跳转
        server {
            listen       80;
            server_name  www.abc.com;     # 网址一
            location / {
                root   html;
                index  index.html index.htm;
    	    proxy_pass http://127.0.0.1:8081/;    # 项目端口号
            }
            error_page   500 502 503 504  /upgrade.html;
            location = /upgrade.html {
                root   html;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    修改之后的,这样再访问www.abc.com会直接跳转到加密网址

       server{
    		listen       80; 
    		server_name  www.abc.com;  # 域名一
    		rewrite ^(.*) https://$server_name$1 permanent;   #重写地址
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    http自动跳转https方式有多种
    1、强制重写成安全地址(本文)
    2、使用301重定向的方式将 http 的请求重定向到 https 上

       server{
    		listen       80; 
    		server_name  www.abc.com;  # 域名一
    		return 301 https://$server_name$request_uri;   # 重定向
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、使用error_page,将http和https的监听配置写在同一个server块中,相当于将上面的两个server进行整合,包括其他配置也写在同一个server中

       server {
        listen 80;
        listen 443 ssl;
        server_name www.abc.com;
        ssl on;
        ssl_certificate      xxxxxxx.pem;
        ssl_certificate_key  xxxxxxx.key;  # 这是www.abc.com 域名的ssl证书
        # 其他配置项,这里省略
        error_page 497 https://$server_name$request_uri;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    提示:配置完成后,先关闭nginx服务进程,再重新启动!!!!因为有时候 sudo nginx -s reload 重新加载会不起作用。

  • 相关阅读:
    C++ 学习 之 名字空间 namespace
    设计模式详解:模式汇总与索引清单
    学习css过渡动画-transition
    【每日一题】1654. 到家的最少跳跃次数
    鲜花展示预约小程序的内容有有哪些
    ElasticSearch 一文读懂
    Kotlin 协程 知识点
    大数据之LibrA数据库系统上下电管理
    【计网实验报告】Cisco局域网模拟组建、简单网络测试
    Linux 网络性能的 15 个优化建议
  • 原文地址:https://blog.csdn.net/zyf_smile/article/details/126522931