本文详细介绍了Nginx的配置和兼容HTTP的代码分析。原文根据示例代码非常详细,对大家的学习培训或者工作都有一定的参考价值,朋友们一定要参考。
使用OpenSSL形成SSL密钥和CSR文件
HTTPS配置应使用私钥example.key文件和example.crt证书文件,申请证书文件时应使用example.csr文件。OpenSSL指令可以形成example.key文件和example.csr证书文件。
CSR:certificateSigningRequest,证书签名请求文档,包含申请人的DN(可分辨名称)和公钥信息,在第三方证书颁发机构进行证书签名时必须出示。证书授予机构获得CSR后,用其根证书的私钥对证书数据进行加密,形成一个CRT证书文件,其中包括证书数据的加密信息和申请人的DN和公钥信息
密钥:证书申请人的私钥文件与证书中的公钥相匹配,在整个HTTPS“波”通信过程中,必须用私钥来解密用户发送的证书公钥数据加密的随机数字信息。它是整个HTTPS数据加密通信过程中的关键文件,在配置HTTPS时需要使用
。
OpenSSl指令可以在系统软件的当前目录下形成example.key和example.csr文件:
OpenSSLreq-new-newkeyRSA:2048-sha256-nodes-outExample_com.CSR-keyutExample_com.key-subj"/C=CN/ST=ShenZhen/L=ShenZhen/O=ExampleInc./OU=WebSecurity/CN=Example.com"/br/]
以下是指令相关字段名称的含义:
在csr文件形成之后,它被呈现给CA组织。签名成功后,将获得一个example.crt证书文件。获得SSL证书文件后,可以在Nginx配置文件中配置HTTPS。
配置HTTPS
基本配置
打开HTTPS服务项目,在配置文件信息块(服务器块)中,一定要应用监听指令的ssl主要参数,定义网络服务器的证书文件和私钥文件,如下图所示:
server{ #ssl主要参数 listen443ssl; server_nameexample.com; #证书文件 ssl_certificateexample.com.crt; #私钥文件 ssl_certificate_keyexample.com.key; ssl_protocolsTLSv1TLSv1.1TLSv1.2; ssl_ciphersHIGH:!aNULL:!MD5; #... }证书文件将作为公共实体线发送到每个连接到网络服务器的客户端,私钥文件作为安全实体线,应该存储在具有一定管理权限的文件目录文件中,Nginx的主进程应该具有存储管理权限。
私钥文件也可能与证书文件一起放在一个文件中,如下所示:
SSL_www.example.com.cert证书;
SSL_certificate_keywww.example.com.cert;
在这种情况下,证书文件的加载管理权限应该受到多方面的限制,即使证书和私钥存储在同一个文件中,但只会将证书发送给客户端。
指令ssl_protocols和ssl_ciphers可用于将连接限制为仅包括SSL/TLS的增强版本号和优化算法,初始值如下:
SSL_protocolsTLSv1TLSv1.1TLSv1.2;
ssl_ciphers高:!阿努尔:MD5
因为这两个指令的初始值已经改变了好几次,所以不建议定义显性基因,除非有必须额外定义的值,比如定义D-H优化算法:
#应用DH文件
SSL_DHparam/etc/SSL/certs/DHparam.PEM;
SSL_protocolsTLSv1TLSv1.1TLSv1.2;
#定义优化算法
SSL_ciphers"EECDHECDSAAESGCmeecDHECDSAsha384EECDHECDSAsha256EECDHARSAsha384EECDHARSAsha256EECDHARSARC4EECDHEDHARSAaNULL!艾努尔。低!3DES!MD5!EXP!PSK!SRP!DSS!RC4”;
#...
HTTP对于HTTPS是强制的
此外,还配置了一个服务器模块来监控端口80和重写。
server{ listen80; server_name服务器ip; rewrite^(.*)$https://$host$1permanent;#http强制性转https }服务器配置参考
server{ listen80; server_name服务器ip; rewrite^(.*)$https://$host$1permanent;#http强制性转https } server{ charsetutf-8;#网络服务器编号 listen443ssl;#监视详细地址 server_name服务器ip;#证书关联的域名 server_tokensoff;#掩藏nginx版本信息 #ssl配置 ssl_certificate/etc/ssl/certs/nginx-selfsigned.crt;#证书公匙 ssl_certificate_key/etc/ssl/private/nginx-selfsigned.key;#证书私钥 ssl_session_timeout5m; ssl_ciphersSHA256: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_protocolsTLSv1TLSv1.1TLSv1.2; ssl_prefer_server_ciphersoff; ssl_dhparam/etc/nginx/dhparams.pem; #请求头 add_headerStrict‐Transport‐Securitymax‐age=63072000; add_headerX-Frame-OptionsSAMEORIGIN; add_headerContent-Security-Policy"default-src'self'http:https:data:blob:'unsafe-inline'"always; add_headerX-Content-Type-Optionsnosniff;add_headerX-XSS-Protection"1;mode=block"; add_headerStrict-Transport-Security"max-age=31536000;includeSubdomains;"; add_headerSet-Cookie"HttpOnly"; add_headerSet-Cookie"Secure"; #要求方式限定 ##Onlyallowtheserequestmethods## if($request_method!~^(GET|POST|DELETE|PUT|PATCH)$){ return444; } #浏览途径搭配 location/{ root/usr/share/nginx/html;#网站文件目录 indexindex.htmlindex.htm; } location/test/{ proxy_passhttp://127.0.0.1:8100/;#分享本地端口8100 } #禁止访问途径 #location/dirdeny{ #denyall; #return403; #} #不正确网页页面配置 error_page502503504/error502.html; location=/error502.html{ root/usr/share/nginx/html; } error_page500/error.html; location=/error.html{ root/usr/share/nginx/html; } error_page404/notfind.html; location=/notfind.html{ root/usr/share/nginx/html; } }文章里的内容就这些了。期待对大家的学习和培训有所帮助,也期待大家的应用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)