Nginx添加ssl(支持https访问)
我们系统大部分是部署在公司机房,原本以为在内部服务器nginx上面配置ssl,不会生效,所以一直没有配置ssl,最近实在看不下去了,决定实验一下,按说外网跟内网只是一个映射,ssl还是需要配置在内网机房服务器上面。
查看nginx版本,检查是否已安装了ssl模块
/usr/local/nginx/sbin/nginx -V
如果没有出现http_ssl_module,说明没有安装
nginx version: nginx/1.13.3
built by gcc 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module
从上面可以看出,我的nginx版本是1.13.3,没有安装ssl模块
查看nginx解压目录
注意:就是你当初安装nginx时的源码目录,不是安装后的目录
如果你的解压目录没了,就去nginx官网下载相同版本,放到服务器解压出来
编译ssl模块
找到configure 文件所在目录,进入此目录,执行如下命令
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
接下来执行,切记不要执行make install,否则会重新安装nginx
make
执行过程中可能会报错,我碰到如下错误
src/http/ngx_http_script.c:1296:18: error: cast between incompatible
此时需要vim进入/home/nginx/nginx-1.13.3/objs/Makefile,把下面这行中的-Werror去掉,就不会把警告当做错误了,然后重新make
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g
将编译好的nginx执行文件,替换掉之前安装的nginx,注意先备份
备份:cp -rf /usr/local/nginx/sbin/nginx /home/nginx/sbin-bak/
替换:cp /home/nginx/nginx-1.13.3/objs/nginx /usr/local/nginx/sbin/
重启Nginx
/usr/local/nginx/sbin/ -s reload
配置ssl
一般在server块,配置ssl on;ssl_certificate指定pem文件路径,ssl_certificate_key指定key文件路径
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 9088 ssl;#域名server_name test.com;ssl on;#ssl证书的pem文件路径ssl_certificate /home/nginx/ssl/test.com.pem;#ssl证书的key文件路径ssl_certificate_key /home/nginx/ssl/test.com.key;location / {proxy_pass http://ip:port;}
}
server {listen 80;server_name test.com;#将请求转成httpsrewrite ^(.*)$ https://$host$1 permanent;
}