最近购买了两个域名,目前还没有其他业务场景,就想都解析在一个服务器上,发现原来安装的nginx ssl版本太低,不能适配两个证书。就对这个进行了研究。
依赖库安装
1. 安装 gcc 环境
$ sudo yum -y install gcc gcc-c++ # nginx 编译时依赖 gcc 环境
2. 安装 pcre
$ sudo yum -y install pcre pcre-devel # 让 nginx 支持重写功能
3. 安装 zlib
# zlib 库提供了很多压缩和解压缩的方式,nginx 使用 zlib 对 http 包内容进行 gzip 压缩
$ sudo yum -y install zlib zlib-devel
4. 安装 openssl
# 安全套接字层密码库,用于通信加密
$ sudo yum -y install openssl openssl-devel
以上安装完成后,进行 nginx 安装。
nginx 源码包安装
将准备好的 nginx-x.xx.x.tar.gz
包,拷贝至 /usr/local/nginx
目录下(一般习惯在此目录下进行安装)进行解压缩。
源码包下载地址:nginx.org/en/download…
$ sudo tar -zxvf nginx-1.11.5.tar.gz # 解压缩
在完成解压缩后,进入 nginx-1.11.5
目录进行源码编译安装。
$ cd nginx-1.11.5
$ ./configure --prefix=/usr/local/nginx # 检查平台安装环境# --prefix=/usr/local/nginx 是 nginx 编译安装的目录(推荐),安装完后会在此目录下生成相关文件
如果前面的依赖库都安装成功后,执行 ./configure --prefix=/usr/local/nginx
命令会显示一些环境信息。如果出现错误,一般是依赖库没有安装完成,可按照错误提示信息进行所缺的依赖库安装。
进行源码编译并安装 nginx
$ make # 编译
$ make install # 安装
使用nginx -c的参数指定nginx.conf文件的位置,这个指令在初始化配置的同时也会启动nginx。
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
源码包安装与 yum 安装的 nginx 服务操作命令也不同。
- 启动服务
$ /usr/local/nginx/sbin/nginx
- 重新加载服务
$ /usr/local/nginx/sbin/nginx -s reload
- 停止服务
$ /usr/local/nginx/sbin/nginx -s stop
查看 nginx 服务进程
$ ps -ef | grep nginx # 查看服务进程
配置双ssl访问
进入nginx的安装目录,如上的/usr/local/nginx/nginx-x.x.x/
$ wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
$ tar zxvf openssl-1.0.1e.tar.gz
# 将ssl配置进去
$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/usr/local/nginx/nginx-1.23.1/openssl-1.0.1e --with-openssl-opt="enable-tlsext"
# 重新make编译安装一下nginx
make
make install
然后设置一下nginx.conf
server{#监听443端口listen 443 ssl;#对应的域名,空格分隔域名就可以了server_name laterz.cn; #第一个域名的文件ssl_certificate /opt/ssl/.cn/8256221_laterz.cn.pem;ssl_certificate_key /opt/ssl/.cn/8256221_laterz.cn.key;# 其他配置ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;#这是我的主页访问地址,因为使用的是静态的html网页,所以直接使用location就可以完成了。location / {root /;index /;proxy_pass http://127.0.0.1:9091;proxy_set_header Host $host:443;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Via "nginx";}
}
server{#监听443端口listen 443 ssl;#对应的域名,空格分隔域名就可以了server_name whrss.com;# 第二个域名的文件ssl_certificate /opt/ssl/.com/8295683_whrss.com.pem;ssl_certificate_key /opt/ssl/.com/8295683_whrss.com.key;# 其他配置ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;#这是我的主页访问地址,因为使用的是静态的html网页,所以直接使用location就可以完成了。location / {root /;index /;proxy_pass http://127.0.0.1:9091;proxy_set_header Host $host:443;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Via "nginx";}
}
配置好conf后,需要再执行一下配置指定
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
此时 查看一下nginx的状态
$ /usr/local/nginx/sbin/nginx -V