nginx http转https配置(Nginx配置并兼容HTTP实现代码解析)
nginx http转https配置
Nginx配置并兼容HTTP实现代码解析使用 OpenSSL 生成 SSL Key 和 CSR 文件
配置 HTTPS 要用到私钥 example.key 文件和 example.crt 证书文件,申请证书文件的时候要用到 example.csr 文件,OpenSSL 命令可以生成 example.key 文件和 example.csr 证书文件。
CSR:Cerificate Signing Request,证书签署请求文件,里面包含申请者的 DN(Distinguished Name,标识名)和公钥信息,在第三方证书颁发机构签署证书的时候需要提供。证书颁发机构拿到 CSR 后使用其根证书私钥对证书进行加密并生成 CRT 证书文件,里面包含证书加密信息以及申请者的 DN 及公钥信息
Key:证书申请者私钥文件,和证书里面的公钥配对使用,在 HTTPS 『握手』通讯过程需要使用私钥去解密客戶端发來的经过证书公钥加密的随机数信息,是 HTTPS 加密通讯过程非常重要的文件,在配置 HTTPS 的時候要用到
使用 OpenSSl命令可以在系统当前目录生成 example.key 和 example.csr 文件:
openssl req -new -newkey rsa:2048 -sha256 -nodes -out example_com.csr -keyout example_com.key -subj "/C=CN/ST=ShenZhen/L=ShenZhen/O=Example Inc./OU=Web Security/CN=example.com"
下面是上述命令相关字段含义:
- C:Country ,单位所在国家,为两位数的国家缩写,如: CN 就是中国
- ST 字段: State/Province ,单位所在州或省
- L 字段: Locality ,单位所在城市 / 或县区
- O 字段: Organization ,此网站的单位名称;
- OU 字段: Organization Unit,下属部门名称;也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
- CN 字段: Common Name ,网站的域名;
生成 csr 文件后,提供给 CA 机构,签署成功后,就会得到一個 example.crt 证书文件,SSL 证书文件获得后,就可以在 Nginx 配置文件里配置 HTTPS 了。
配置 HTTPS
基础配置
要开启 HTTPS 服务,在配置文件信息块(server block),必须使用监听命令 listen 的 ssl 参数和定义服务器证书文件和私钥文件,如下所示:
server { #ssl参数 listen 443 ssl; server_name example.com; #证书文件 ssl_certificate example.com.crt; #私钥文件 ssl_certificate_key example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; #... }
证书文件会作为公用实体發送到每台连接到服务器的客戶端,私钥文件作为安全实体,应该被存放在具有一定权限限制的目录文件,并保证 Nginx 主进程有存取权限。
私钥文件也有可能会和证书文件同放在一個文件中,如下面情況:
ssl_certificate www.example.com.cert;
ssl_certificate_key www.example.com.cert;
这种情況下,证书文件的的读取权限也应该加以限制,仅管证书和私钥存放在同一个文件里,但是只有证书会被发送到客戶端
命令 ssl_protocols 和 ssl_ciphers 可以用来限制连接只包含 SSL/TLS 的加強版本和算法,默认值如下:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
由于这两个命令的默认值已经好几次发生了改变,因此不建议显性定义,除非有需要额外定义的值,如定义 D-H 算法:
#使用DH文件
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#定义算法
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
#...
HTTP强制转HTTPS
另外配置一个server块,监听80端口,再加上rewrite。
server { listen 80; server_name 服务器ip; rewrite ^(.*)$ https://$host$1 permanent; #http强制转https }
server配置参考
server { listen 80; server_name 服务器ip; rewrite ^(.*)$ https://$host$1 permanent; #http强制转https } server { charset utf-8; #服务器编码 listen 443 ssl; #监听地址 server_name 服务器ip; #证书绑定的网站域名 server_tokens off; #隐藏nginx版本号 #ssl配置 ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; #证书公钥 ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; #证书私钥 ssl_session_timeout 5m; ssl_ciphers SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers off; ssl_dhparam /etc/nginx/dhparams.pem; #请求头 add_header Strict‐Transport‐Security max‐age=63072000; add_header X-Frame-Options SAMEORIGIN; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; add_header Set-Cookie "HttpOnly"; add_header Set-Cookie "Secure"; #请求方法限制 ## Only allow these request methods ## if ($request_method !~ ^(GET|POST|DELETE|PUT|PATCH)$ ) { return 444; } #访问路径匹配 location / { root /usr/share/nginx/html; #站点目录 index index.html index.htm; } location /test/ { proxy_pass http://127.0.0.1:8100/; #转发本地端口8100 } #禁止访问路径 # location /dirdeny { # deny all; # return 403; #} #错误页面配置 error_page 502 503 504 /error502.html; location = /error502.html{ root /usr/share/nginx/html; } error_page 500 /error.html; location = /error.html{ root /usr/share/nginx/html; } error_page 404 /notfind.html; location = /notfind.html{ root /usr/share/nginx/html; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
- nginx 配置强制跳转https(Nginx实现https网站配置代码实例)
- nginx反向代理性能(nginx作grpc的反向代理踩坑总结)
- vue项目部署到服务器的nginx(Nginx部署vue项目和配置代理的问题解析)
- nginx 怎么避免options请求(详解nginx 的 default_server 定义及匹配规则)
- 新手nginx反向代理问题(详解Nginx proxy_pass的一个/斜杠引发的血案)
- nginx前后端跨域(Nginx解决前端访问资源跨域问题的方法详解)
- 如何采集nginx的日志(Filebeat 采集 Nginx 日志的方法)
- nginx配置使用环境变量(关于Nginx开启gzip的配置的问题)
- nginx过滤http请求协议(nginx对http请求处理的各个阶段详析)
- 宝塔web服务器如何安装(宝塔面板开启Nginx/Apache防火墙四层防御的方法)
- nginx反向代理spring boot(Nginx+SpringBoot实现负载均衡的示例)
- nginx怎么用ssl证书(制作能在nginx和IIS中使用的ssl证书)
- linux下安装nginx常见问题(Linux安装Nginx步骤详解)
- nginx https 域名配置(阿里云Nginx配置https实现域名访问项目图文教程)
- nginx反向代理多个server(Nginx反向代理多个服务器的实现方法)
- nginx配置目录(nginx配置文件使用环境变量的操作方法)
- 大事件 合肥四中火了(大事件合肥四中火了)
- 翼龙贷组织出借人调研 感受鄱阳 借 来的致富路(翼龙贷组织出借人调研)
- 2023新国风戏曲教育寒假集训班汇报演出《戏娃闹元宵》图文报道(2023新国风戏曲教育寒假集训班汇报演出戏娃闹元宵图文报道)
- 九儿《狐踪谍影》出演热血女特警,戏份杀青受关注(九儿狐踪谍影出演热血女特警)
- 红色代表什么(红色代表什么寓意)
- 蓝天代表什么(蓝天代表什么生肖)
热门推荐
- ftp总是出现错误(FTP出现500 OOPS: cannot change directory的解决方法)
- javascript如何跨域
- python旅游(详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?)
- css3网格布局图(详解CSS3 弹性布局快速入门)
- vue改数组和对象值(vue $set 实现给数组集合对象赋值)
- php大量数据计算有什么技巧(PHP各种常见经典算法总结排序、查找、翻转等)
- JS函数前面感叹号的作用
- phpstudy中apache到期如何修改(phpStudy找不到Apache“服务名” 解决方法)
- 最全面的mysql索引详解(MySQL 全文索引使用指南)
- 手机网站Meta的使用
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9