Nginx配置并兼容HTTP实现代码解析

Nginx配置并兼容HTTP实现代码解析,第1张

Nginx配置并兼容HTTP实现代码解析

本文详细介绍了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/]

以下是指令相关字段名称的含义:

  • c:国家,企业属于中国,是国家的两位数缩写,比如:CN就是中国。
  • ST字段名:州/省,企业所在的州或省。
  • l字段名:所在地,企业所在地/区/县。
  • o域名:机构,本网站的公司名称;
  • OU字段名称:组织单元,下属部门名称;也常用于显示证书的相关信息,如证书类型、证书产品名称或身份认证类型或认证内容等。
  • CN域名:常用名,网站地址的网站域名;
  • 在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; } }

    文章里的内容就这些了。期待对大家的学习和培训有所帮助,也期待大家的应用。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: https://outofmemory.cn/zz/774053.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存