当前位置:   article > 正文

Nginx 配置 SSL(HTTPS)详解

Nginx 配置 SSL(HTTPS)详解

Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。

随着互联网安全性的日益重要,HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务器,自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL,实现HTTPS的访问。

使用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端口,如果配置不对,会出现502 Bad Getway

  • proxy_pass后边的要写IP地址,不能写域名,否则还要解决域名解析的问题,有据称如果写localhost的,访问速度会变慢,是因为需要访问host文件解析localhost
  • 响应8080端口的server块,也要注意,也要写成侦听ssl,配置好证书位置
  1. upstream plan-uat {
  2. server 10.202.159.74:8080 max_fails=3 fail_timeout=10 weight=1;
  3. }
  4. server {
  5. server_name plan-uat.ztoky.cn;
  6. listen 443 ssl ;
  7. ssl_certificate ssl/ztoky.cn.crt;
  8. ssl_certificate_key ssl/ztoky.cn.key;
  9. access_log logs/plan-uat.ztoky.cn.access.log json;
  10. location /plan/ {
  11. proxy_pass http://plan-uat/;
  12. include proxy.conf;
  13. }
  14. }

一、准备SSL证书

首先,我们需要准备SSL证书。你可以选择从证书颁发机构(CA)购买商业证书,也可以自己生成自签名证书。自签名证书虽然免费,但不会被浏览器信任,仅适用于测试环境。

如果你选择购买商业证书,通常会获得以下文件:

  • 证书文件(例如:example.com.crt)
  • 私钥文件(例如:example.com.key)
  • 中间证书文件(如果有的话)
二、安装SSL模块

Nginx默认支持SSL模块,因此通常无需额外安装。但为了确保SSL功能可用,你可以检查Nginx的编译参数中是否包含了--with-http_ssl_module。

三、配置Nginx SSL

(1) 打开Nginx配置文件,通常位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。

(2) 在http块中,配置SSL相关参数。示例如下:

  1. http {
  2. ...
  3. server {
  4. listen 443 ssl;
  5. server_name example.com;
  6. ssl_certificate /path/to/example.com.crt; # 证书文件路径
  7. ssl_certificate_key /path/to/example.com.key; # 私钥文件路径
  8. # 如果有中间证书,也需要配置
  9. ssl_trusted_certificate /path/to/intermediate.crt;
  10. # 其他SSL配置参数
  11. ssl_protocols TLSv1.2 TLSv1.3; # 支持的协议版本
  12. ssl_ciphers HIGH:!aNULL:!MD5; # 加密套件
  13. ssl_prefer_server_ciphers on; # 优先使用服务器端的加密套件
  14. # 其他server配置...
  15. }
  16. ...
  17. }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.
四、测试HTTPS访问

现在,你的Nginx服务器已经配置了SSL,可以通过HTTPS协议访问了。在浏览器中输入https://example.com,检查是否能够成功访问并显示安全的连接标识(如绿色锁头)。

此外,你还可以使用命令行工具(如openssl或curl)来测试HTTPS连接和证书的有效性。

五、优化与安全性考虑
  • 启用HSTS(HTTP Strict Transport Security):通过在响应头中添加Strict-Transport-Security字段,强制浏览器只通过HTTPS访问网站。
  • 启用OCSP Stapling:通过在线证书状态协议(OCSP)检查证书的有效性,提高证书验证的效率。
  • 使用更强大的加密算法和协议:根据安全性的要求,可以调整ssl_ciphers和ssl_protocols等参数,使用更强大的加密算法和协议版本。
  • 定期更新和更换证书:商业证书通常有有效期限制,需要定期更新。同时,为了增强安全性,也可以定期更换证书。

通过以上步骤,你可以成功在Nginx中配置SSL,实现HTTPS的访问。记得在配置过程中注意安全性考虑,并根据实际需求进行相应的优化。

 

配置代理


使用proxy_pass指令来配置代理。以下是一个示例配置,将HTTPS请求代理到另一个HTTPS服务器:(注意这里的后端是HTTPS的服务)

后端服务是https类型的  proxy_pass https://your.backend.server;

后端服务是http类型的    proxy_pass https//your.backend.server;

  1. server {
  2.   # 监听443端口,处理所有HTTPS请求
  3.   listen 443 ssl;
  4.   server_name your.domain.com;
  5.   # SSL配置
  6.   ssl_certificate /path/to/your/cert.pem;
  7.   ssl_certificate_key /path/to/your/private.key;
  8.   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  9.   ssl_ciphers HIGH:!aNULL:!MD5;
  10.   # 代理配置,将HTTPS请求代理到另一个HTTPS服务器
  11.   location / {
  12.     proxy_pass https://your.backend.server;
  13.   }
  14. }

以上配置假设您的域名是your.domain.com,代理目标是您的后端HTTPS服务器(例如https://your.backend.server)。请记住将路径和参数适当地配置为您的特定场景。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/489871
推荐阅读
相关标签
  

闽ICP备14008679号