Nginx 配置 SSL(HTTPS)详解
Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通讯。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。随着互联网安全性的日益重要,HTTPS协议逐渐成为网站加密通讯的标配。Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通讯。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。
https://img-blog.csdnimg.cn/direct/35d4cb8db7be41f4b2344e1a7b37a566.png
利用Nginx进行反向代理的时候,对于正常的http;流量利用 location 块而且配置 proxy_pass 转发即可,但是假如是https的流量,利用Nginx进行反向代理的时候,直接利用 proxy_pass 会出现各种报错的情况,包括不限于:
[*]502 Bad Getway
[*]ERR_SSL_PROTOCOL_ERROR
[*]ERR_CONNECTION_RESET
我本身碰到的ERR_SSL_PROTOCOL_ERROR错误比较多,这是由于在配置Nginx的时候,对于443端口本身的侦听没有带上 ssl 关键字,所以会报SSL协议错误,但是假如加上ssl,没有给证书位置,也是不可
对于转发到8080端口,假如配置不对(比如后端服务是http,结果配置了https),会出现502 Bad Getway
[*]proxy_pass后边的要写IP地址,不能写域名,否则还要解决域名解析的问题,有据称假如写localhost的,访问速度会变慢,是由于需要访问host文件解析localhost
[*]相应8080端口的server块,也要留意,也要写成侦听ssl,配置好证书位置
upstreamplan-uat {
server 10.202.159.74:8080 max_fails=3 fail_timeout=10 weight=1;
}
server {
server_name plan-uat.ztoky.cn;
listen 443 ssl ;
ssl_certificate ssl/ztoky.cn.crt;
ssl_certificate_key ssl/ztoky.cn.key;
access_log logs/plan-uat.ztoky.cn.access.log json;
location /plan/ {
proxy_pass http://plan-uat/;
include proxy.conf;
}
} 检查 linux 服务器上的 nginx 是否安装 ssl 模块
nginx 安装目次,下面有个 sbin 文件夹,来到 sbin 目次下执行 ./nginx -V命令,留意是大写的 V,小写的 v 只会展示 nginx 的版本号信息。执行完出现下图圈红的这些信息说明 ssl 模块已经安装过了。可以忽略下文的 ssl 模块安装的相关内容,直接看 nginx 配置的内容。
cd /usr/local/nginx/sbin
./nginx -V 为 nginx 安装 ssl 模块
假如没有安装 ssl 模块,即使你成功的配置好 https 的相关配置,网站也依旧不能利用 https,会提示诸如:无法提供安全毗连、TLS协议不支持等问题。ssl 模块的安装是为了能让后端接口得以利用 https 的方式调用。找到我们的 nginx 安装解压包,我这里是放在 /usr/local/software 目次下,然后执行如下命令进入到 nginx-1.18.0 目次下。
cd /usr/local/nginx-1.18.0 来到 ngixn-1.18.0 目次 然后依次执行如下这命令,配置了 ssl 模块,利用 make 命令重新编译
./configure --with-http_ssl_module
make https://img-blog.csdnimg.cn/direct/a5f117f52a974675858e497a7d1a67d2.png
进入 objs 目次,会看到 nginx 的可执行文件
https://img-blog.csdnimg.cn/direct/69aeed71840e4ff0ad1b74e8e495d7ce.png
留意,不能利用 make install 命令,这样会导致重新安装 nginx,此时当前目次就会出现 objs 目次
更换 nginx 可执行文件,我们利用这个新的 nginx 可执行文件 更换 sbin 目次下的 nginx 可执行文件
cp ./nginx /usr/local/nginx/sbin/ 系统会询问你是否覆盖,输入 y 即可,假如覆盖失败,多半是由于你的 nginx 还在启动中,先将 nginx 关闭即可,再次查验是否安装 ssl 模块,进入 nginx 目次
cd /usr/local/nginx/sbin/ 执行命令
./nginx -V 此时就能看到 ssl 模块已经安装成功了
https://img-blog.csdnimg.cn/direct/1c1e6aa7757b414a80ecdbfded9e4fe3.png
预备SSL证书
起首,我们需要预备SSL证书。你可以选择从证书颁发机构(CA)购买贸易证书,也可以自己生成自署名证书。自署名证书虽然免费,但不会被浏览器信任,仅适用于测试情况。
假如你选择购买贸易证书,通常会得到以下文件:
[*]证书文件(比方:example.com.crt)
[*]私钥文件(比方:example.com.key)
[*]中间证书文件(假如有的话)
配置Nginx SSL 启用443端口
(1) 打开Nginx配置文件,通常位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。
(2) 在http块中,配置SSL相关参数。示比方下:
http {
...
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/example.com.crt;# 证书文件路径
ssl_certificate_key /path/to/example.com.key;# 私钥文件路径
# 如果有中间证书,也需要配置
ssl_trusted_certificate /path/to/intermediate.crt;
# 其他SSL配置参数
ssl_session_cache shared:SSL:1m;
ssl_session_timeout5m;
ssl_protocols TLSv1.2 TLSv1.3;# 支持的协议版本
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;# 使用此加密套件
ssl_prefer_server_ciphers on;# 优先使用服务器端的加密套件
# 其他server配置...
}
...
} 测试HTTPS访问
现在,你的Nginx服务器已经配置了SSL,可以通过HTTPS协议访问了。在浏览器中输入https://example.com,检查是否能够成功访问并显示安全的毗连标识(如绿色锁头)。
此外,你还可以利用命令行工具(如openssl或curl)来测试HTTPS毗连和证书的有效性。
配置代理
利用proxy_pass指令来配置代理。以下是一个示例配置,将HTTPS请求代理到另一个HTTPS服务器:(留意这里的后端是HTTPS的服务)
后端服务是https范例的 proxy_pass https://your.backend.server;
后端服务是http范例的 proxy_pass http://your.backend.server;
server {
# 监听443端口,处理所有HTTPS请求
listen 443 ssl;
server_name your.domain.com;
# SSL配置
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/private.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
# 代理配置,将HTTPS请求代理到另一个HTTPS服务器
location / {
proxy_pass https://your.backend.server;
}
} 以上配置假设您的域名是your.domain.com,代理目标是您的后端HTTPS服务器(比方https://your.backend.server)。请记住将路径和参数适当地配置为您的特定场景。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]