Nginx实现多域名证书HTTPS

摘要:
目前,该公司有两个域名,包括三个子域名,这次需要更改为HTTPS传输,即:passport.abc.comwww.test.comadmin.test.com,这涉及购买ssl证书。由于价格问题,使用了三个不同的证书(每个域名一个)。由于实验环境的原因,我们将手动生成三个ssl证书来创建一个目录并输入目录[root@gz122haproxy95~]#mkdir~/keys[root@gz122ha

目前公司有2个域名,其中这次涉及到3个子域名需要更改为HTTPS传输,分别为:

passport.abc.com

www.test.com

admin.test.com

那么就涉及到购买ssl证书的问题,由于价格问题使用3个不同的证书(每个域名一个)。

由于实验环境,我们就手动生成3个ssl证书

建立目录,及进入目录

[root@gz122haproxy95 ~]# mkdir ~/keys
[root@gz122haproxy95 keys]# cd ~/keys
[root@gz122haproxy95 keys]# openssl genrsa -out passport.abc.com.key 2048
[root@gz122haproxy95 keys]# openssl req -new -key passport.abc.com.key -out passport.abc.com.csr
 
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CN  #国家
State or Province Name (full name) [Berkshire]:GuangDong  #省份
Locality Name (eg, city) [Newbury]:ShenZhen  #城市
Organization Name (eg, company) [My Company Ltd]:Test.Inc    #公司名称
Organizational Unit Name (eg, section) []:passport.abc.com    #组织名称
Common Name (eg, your name or your server's hostname) []:passport.abc.com  #域名
Email Address []:passport@abc.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
 
[root@gz122haproxy95 keys]# openssl x509 -req -days 3650 -in passport.abc.com.csr -signkey passport.abc.com.key -out passport.abc.com.crt

按照以上方法,把名称替换掉再制作2份,最后的结果就是

[root@gz122haproxy95 keys]# ls -l
total 36
-rw-r--r-- 1 root root 1354 Dec  4 16:54 admin.test.com.crt
-rw-r--r-- 1 root root 1050 Dec  4 16:54 admin.test.com.csr
-rw-r--r-- 1 root root 1675 Dec  4 16:52 admin.test.com.key
-rw-r--r-- 1 root root 1354 Dec  4 16:48 passport.abc.com.crt
-rw-r--r-- 1 root root 1078 Dec  4 16:44 passport.abc.com.csr
-rw-r--r-- 1 root root 1675 Dec  4 16:41 passport.abc.com.key
-rw-r--r-- 1 root root 1354 Dec  4 16:52 www.test.com.crt
-rw-r--r-- 1 root root 1062 Dec  4 16:52 www.test.com.csr
-rw-r--r-- 1 root root 1679 Dec  4 16:51 www.test.com.key

现在就是Nginx和OpenSSL的安装与配置(这里注意,一般情况下一个IP只支持一个SSL证书,那么我们现在要在一个IP上实现多个SSL证书,就必须让Nginx支持TLS SNI,由于默认的OpenSSL是没有打开TLS SNI的)

[root@gz122haproxy95 ~]# wget
[root@gz122haproxy95 ~]# tar zxf openssl-0.9.8zh.tar.gz 
[root@gz122haproxy95 ~]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@gz122haproxy95 ~]# tar zxf nginx-1.8.0.tar.gz
[root@gz122haproxy95 ~]# cd nginx-1.8.0
[root@gz122haproxy95 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx1.8.0 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=../openssl-0.9.8zh
[root@gz122haproxy95 nginx-1.8.0]# make && make install
#上面只需要解压openssl即可,然后在nginx的配置参数中添加--with-openssl=DIR指定路径即可,另外由于openssl需要编译,所以时间会较长。

在编译安装nginx的时候可能会出现pcre库没找到或zlib没找到,在CentOS下可以使用

yum -y install pcre-devel zlib-devel

在安装编译好Nginx后,执行

[root@gz122haproxy95 nginx-1.8.0]# /usr/local/nginx1.8.0/sbin/nginx -V
nginx version: nginx/1.8.0
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55)
built with OpenSSL 0.9.8zh 3 Dec 2015
TLS SNI support enabled      #可以看到TLS SNI support打开了
configure arguments: --prefix=/usr/local/nginx1.8.0 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=../openssl-0.9.8zh

然后配置nginx

upstream passport.abc.com {
        server 192.168.20.87:80;
        server 192.168.20.88:80;
       
}
 
    # HTTPS server
    #
    server {
        listen      443 ssl;
        server_name  passport.abc.com;
 
        ssl_certificate      /root/keys/passport.abc.com.crt;
        ssl_certificate_key  /root/keys/passport.abc.com.key;
 
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
 
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
 
        location / {
                proxy_pass http://passport.abc.com;
        }
    }
 
 upstream www.test.com {
        server 192.168.20.98:80;
        server 192.168.20.99:80;
       
}
 
    # HTTPS server
    #
    server {
        listen      443 ssl;
        server_name  www.test.com;
 
        ssl_certificate      /root/keys/www.test.com.crt;
        ssl_certificate_key  /root/keys/www.test.com.key;
 
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
 
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
 
        location / {
                proxy_pass http://www.test.com;
        }
    }

通过以上即可实现nginx的HTTPS的多域名反向代理

免责声明:文章转载自《Nginx实现多域名证书HTTPS》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker学习总结之docker入门jQuery积累:serialize()、stringify()、toJSON()下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Hugo快速搭建Blog

以往我们搭建blog要么学习一个编程语言+Web开发框架,要么使用现成的blog系统(如WordPress)。其实我们还可以使用Hugo。Hugo是由Go语言实现的静态网站生成器,它不需要数据库,所以页面都是通过MarkDown开发的页面。不用安装编程语言环境,不用安装数据库,只需要几个步骤就可以快速搭建一个blog出来。 1 安装 -----------...

nginx 拦截 swagger 登录

随着微服务的也来越多,每个服务都有单独的文档,那么问题来了,怎么把所有文档整合在一起呢 本方法采用服务器拦截的方式进行处理 首先需要在opt 的主目录中 /opt/ 创建一个新文件 htpasswd此文件的书写格式是用户名:密码每行一个账户并且 密码必须使用函数 crypt(3) 加密官方档说 可以用 Apache 的 htpasswd 工具来创建密码文件...

nginx实战三

nginx正向代理https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md   Nginx正向代理使用场景并不多见。 需求场景1: 如果在机房中,只有一台机器可以联网,其他机器只有内网,内网的机器想用使用yum安装软件包,在能能联网的机器上配置一个正向代理即可。...

Apache/Nginx/IIS 访问日志详解

Apache日志详解 1.Apache日志文件名称及所在路径 日志文件一般都是保存在在apache/logs目录下,实际情况可以根据Apache的配置文件去查找日志文件所在的路径。 例如phpstudy(windows)在 :phpstudy/Extensions/apache/logs; wdcp(linux)在 :www/wdlinux/apache/...

基于 Git Tag 发布及回滚代码

基于 Jenkins + Git + Ansible 发布 PHP 项目 1、部署 PHP 运行环境 PHP 是一个动态程序,负责解析 PHP-FPM 服务,而这个服务不支持静态网页处理,一般结合 Nginx 解决这个问题。Nginx 本身是一个静态 Web 服务器,并不支持解析 PHP 程序,但它支持了 FastCGI 接口来调用动态服务来解析 PHP...

乌班图的安装

Ubuntu 系统安装 在VMware中新建虚拟机 指定当前虚拟机使用的系统镜像 设置系统的登录账号密码,设置完成以后一定要记住。 一直等待,系统初始化安装,知道出现下方界面: 输入前面设置的密码,点击Sign In 点击右上角绿色按钮,一路next即可。 点击Install Now,下载最新版本的ubuntu软件...