Nginx配置反向代理与SSL证书

Nginx配置反向代理与SSL证书

彼方 853 2022-03-06

Halo配置Nginx反向代理与SSL证书

前言

最近装了Halo的博客,申请了证书,需要配置一下SSL证书才可以使用Https访问,一顿操作之后搞好了,现在把流程记录下,如果以后有需要,可以直接看这边文档。

安装SSL模块前需要关闭nginx!!!
命令:./nginx -s stop

1 安装Nginx

步骤略过。。。

2 安装SSL模块

如果你不知道你的Ngnix安装时有没有安装SSL模块,可以按照以下方式检查:

  • 进入Nginx安装文件夹,执行如下命令
// 默认安装文件夹:
cd /usr/local/nginx/sbin/
// 执行如下命令:
./nginx -V
// 出现以下内容则为安装成功,反之则未安装:
configure arguments: --with-http_ssl_module

依次执行以下步骤,安装SSL模块(先停止nginx服务再执行安装):

// 找到解压目录(替换成你自己的解压路径)

cd /opt/nginx/nginx-1.14.2

// 执行添加模块命令

./configure --with-http_ssl_module

// 如果出现这个错误(./configure:错误:SSL模块需要OpenSSL库。)依次执行下面命令

yum -y install openssl openssl-devel
./configure
./configure --with-http_ssl_module

// 执行make命令

make

//使用新的程序复制过去覆盖之前

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp objs/nginx /usr/local/nginx/sbin/nginx

// 来到Nginx安装目录下,来查看是否有安装ssl模块成功

./nginx -V

3 申请证书,下载密钥文件

腾讯云申请证书,下载Nginx证书文件,此步骤操作可以在腾讯云进行可视化操作,不再赘述了。

4 编写配置文件

4月18日,时隔十天,填坑一下这篇文章。

下载证书之后,将下图中标注的量文件复制到服务器中,推荐放到etc/ssl文件夹下:
Snipaste_2022-04-16_23-02-25

文件复制之后,打开Nginx配置文件进行证书配置

# 切换到nginx配置文件目录
cd /usr/local/nginx/conf
# 修改nginx配置文件(此处推荐使用FinalShell,可以文本可视化操作)
vi nginx.conf

具体的配置可以参考我的配置文件:

http {
    include mime.types;
    default_type application/octet-stream;


    sendfile on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout 65;

    # 定义一个服务地址
    upstream halo {
        server 127.0.0.1:8090;
    }

    server {
        # 监听端口443
        listen 443;
        # 域名
        server_name qiuzhong.fun;
        # 调整请求体的大小为1G,防止上传较大的文件报错
        client_max_body_size 1024m;
        # 开启SSL证书
        ssl on;
        # 从腾讯云获取到的crt文件的全路径
        ssl_certificate /etc/ssl/qiuzhong.fun_bundle.crt;
        # 从腾讯云获取到的key文件的全路径
        ssl_certificate_key /etc/ssl/qiuzhong.fun.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;

        location / {
            proxy_pass http://halo;
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }

    }

    server {
    	# 监听80端口
        listen 80;
        server_name qiuzhong.fun;
	# 重定向到443端口
        rewrite ^/(.*)$ https://qiuzhong.fun:443/$1 permanent;
    }

}

5 重启Nginx

cd /usr/local/nginx/sbin/
# 启动Nginx
./nginx 
# 停止Nginx
./nginx -s stop
# 退出Nginx
./nginx -s quit
# 重启Nginx
./nginx -s reload

如果重启报错:

nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

执行下方命令杀掉端口进程:

fuser -k 443/tcp
fuser -k 80/tcp

再次启动即可!