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 重新加载会不起作用。