在已安装的Nginx上开启SSL模块并配置https

2022-04-11 09:14:53 浏览数 (1)

前言

今天老板说给域名配置一个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文件即可。

0 人点赞