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



文章目录

  • Nginx 配置多个SSL域名指向不同端口
  • 前言
  • 1、nginx 配置 多个http域名,多个项目
  • 2、nginx 配置 多个SSL域名指向不同端口
  • 3、nginx 配置 http域名主动跳转https域名



前言

提示:系统版本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;
        }
    }

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;
        }
    }

到这里两个项目的证书已经配置完成了,使用 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;
        }
    }

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

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

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

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

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;
}

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