前言
今天老板说给域名配置一个https,于是我便开始配置 Nginx,监听443端口,开启 ssl,:wq保存。然后运行 ./nginx -s relaod 重启Nginx即可。万万没想到,它竟然报错了。
代码语言:javascript复制./nginx -s relaod
报错信息:
代码语言:javascript复制nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:223
分析一下,在配置文件 nginx.conf 223行的ssl 参数需要 ngx_http_ssl_module 模块,显然是当初安装 Nginx 的时候,没有开启 ssl 模块,那么现在就不能配置开启 https 。
那么我们需要卸载 Nginx 重新安装吗?
当然不需要。
- 还不会安装 Nginx 的小伙伴们,请移步到历史文章 CentOS7(Linux)源码安装Nginx
解决方案
现在我们要在已安装的 Nginx 上开启SSL模块并配置https。
注:在这里,我的 Nginx
安装目录是 /usr/local/nginx,
源码解压目录是 /usr/local/resource/nginx-1.18.0
1、切换到 Nginx 安装目录下的 sbin 目录
代码语言:javascript复制cd /usr/local/nginx/sbin/
2、将 Nginx 停止运行
代码语言:javascript复制./nginx -s stop
3、切换到源码解压目录
代码语言:javascript复制cd /usr/local/resource/nginx-1.18.0
4、查看 Nginx 原有的模块配置
代码语言:javascript复制/usr/local/nginx/sbin/nginx -V
5、在configure arguments:后面显示的原有的configure参数如下:
代码语言:javascript复制--prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/conf/nginx.pid --lock-path=/usr/local/nginx/lock/nginx.lock
6、在已有的配置基础上新增 --with-http_ssl_module,形成新的配置命令,并在源码目录运行下面的命令
代码语言:javascript复制./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/conf/nginx.pid --lock-path=/usr/local/nginx/lock/nginx.lock --with-http_ssl_module
7、配置完成后,继续运行命令 make
代码语言:javascript复制make
切记:这里不要进行make install,否则就是覆盖安装
8、备份原有已安装好的 nginx 文件
代码语言:javascript复制cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
9、将刚刚编译好的 nginx 文件覆盖掉原有的 nginx
代码语言:javascript复制cp ./objs/nginx /usr/local/nginx/sbin/
10、查看是否已经加入成功
代码语言:javascript复制/usr/local/nginx/sbin/nginx -V
此时看到 ssl 模块已经被加载
代码语言:javascript复制configure arguments: --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/conf/nginx.pid --lock-path=/usr/local/nginx/lock/nginx.lock --with-http_ssl_module
11、配置 https Server
代码语言:javascript复制server {
# 监听443端口,开始 ssl
listen 443 ssl;
# 域名
server_name mydomain.com;
# 证书路径
ssl_certificate ../ssl_file/mydomain.com.pem;
ssl_certificate_key ../ssl_file/mydomain.com.key;
# 文件传输最大限制20M,通常用于文件上传的大小限制
client_max_body_size 20m;
# 反向代理
location /api/ {
proxy_pass http://127.0.0.1:8888/;
}
location / {
# 项目名称 / 资源目录
root html/project-name;
index index.html index.htm;
# 跨域配置
add_header Access-Control-Allow-Origin *;
add_header Cache-Control "no-cache, no-store";
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
try_files $uri $uri/ /index.html;
}
}
12、启动 Nginx,访问https域名,即可访问成功。
代码语言:javascript复制cd /usr/local/ngxin/sbin
./nginx
结论
在已安装的Nginx上开启SSL模块并配置https,并不需要卸载然后重新安装,只需要在源码的基础上重新编译后覆盖原来的nginx文件即可。