前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在已安装的Nginx上开启SSL模块并配置https

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

作者头像
一个正经的程序员
发布2022-04-11 09:14:53
4.7K0
发布2022-04-11 09:14:53
举报
文章被收录于专栏:一个正经的程序员

前言

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个正经的程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 解决方案
  • 结论
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档