本人操作环境为CentOS7虚拟机,初期是nginx+php7.3,若查看php7.3的安装及配置请前往另一篇:
不会的记得查看官方文档,好东西要用起来;
Nginx官方文档地址:https://docs.nginx.com (NGINX是开源版,NGINX Plus是商业版,文档都在一起的,通用)
Nginx官方下载地址:http://nginx.org/en/download.html (开源,社区版)
Mainline version:主线新版,不建议使用;
Stable version:稳定版本,建议使用;
Legacy versions:旧版本,有需求使用;
|--->1、对站点下目录进行访问限制(例如禁止访问 .git 和 .svn 目录)
|--->2、启用了TLS1.0,不被视为 PCI 数据安全标准,需要升级TLS版本(升级openssl)
|--->3、远程主机支持具有弱或不安全特性的 TLS/SSL 密码套件
|--->6、配置WS/WSS(WebSocket或Web Socket Secure)
|--->7、设置HttpOnly Secure SameSite 以解决 Cookie 跨域丢失问题
一种及其简单的方式是:
[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# yum install -y nginx
当然,他不能选择版本,只是图方便;
官方的yum安装方法:http://nginx.org/en/linux_packages.html#RHEL-CentOS
[root@localhost ~]# yum install -y yum-utils ##添加yum源配置 [root@localhost ~]# vi /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true ##如果要使用主线最新版,默认当前稳定版不需要执行该软命令 [root@localhost ~]# yum-config-manager --enable nginx-mainline ##安装 [root@localhost ~]# yum install -y nginx ##不执行上一条语句,我们安装的是1.18.0,是目前最新的稳定版,若执行上一条去获取主线最新版,则为1.19.8版本 [root@localhost ~]# nginx -V nginx version: nginx/1.18.0
官网tar包下载,当前的稳定版为 nginx-1.18.0 (http://nginx.org/download/nginx-1.18.0.tar.gz)
其次我们需要支持正则表达式,下载pcre,地址:https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
##这是我下载的安装,pcre下的8.44,没有去下载pcre2; ##nginx是当前的稳定版本 1.18.0; [root@localhost ~]# ls -lh *gz -rw-r--r-- 1 root root 1016K Mar 27 18:39 nginx-1.18.0.tar.gz -rw-r--r-- 1 root root 2.0M Mar 27 18:39 pcre-8.44.tar.gz ##下载安装相关的依赖软件 [root@localhost ~]# yum install -y pcre-devel openssl openssl-devel \
> zlib zlib-devel gcc gcc-c++ glibc glibc-devel nasm pkgconfig expat-devel \
> gettext-devel libtool perl-Digest-SHA1.x86_64 make cmake ruby ##创建nginx组和用户,用户为系统用户,不登录 [root@localhost ~]# groupadd -g 80 nginx [root@localhost ~]# useradd -u 80 -g 80 -s /sbin/nologin nginx ##编译安装pcre [root@localhost ~]# tar xvf pcre-8.44.tar.gz [root@localhost ~]# cd pcre-8.44 [root@localhost pcre-8.44]# ./configure && make && make install ##解压 [root@localhost ~]# tar xvf nginx-1.18.0.tar.gz ##修改Nginx Banner头部信息,并不用去掉"#"号 [root@localhost ~]# vi /root/nginx-1.18.0/src/core/nginx.h #define nginx_version 0000000 #define NGINX_VERSION "0.0.0" #define NGINX_VER "Web/" NGINX_VERSION ##编译nginx,注意 "--prefix=" 的路径根据实际情况定义,不过当你需要的时候再次编译安装也可以,重新编译安装只变更程序的文件,配置文件不会变动,但是以防万一,提前备份下之前配置好的配置文件 [root@localhost ~]# cd nginx-1.18.0 [root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
> --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_sub_module \
> --with-http_gzip_static_module --with-http_realip_module --with-stream
[root@localhost nginx-1.18.0]# make && make install ##启动nginx服务 [root@localhost ~]# /usr/local/nginx/sbin/nginx [root@localhost ~]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 10315 root 6u IPv4 51081 0t0 TCP *:http (LISTEN) nginx 10316 nginx 6u IPv4 51081 0t0 TCP *:http (LISTEN) ##访问以下,看下之前我们修改的Nginx Banner信息 [root@localhost ~]# curl -I 192.168.1.10 HTTP/1.1 200 OK Server: Web/0.0.0 Date: Sat, 27 Mar 2021 11:02:48 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Sat, 27 Mar 2021 11:01:02 GMT Connection: keep-alive ETag: "605f106e-264" Accept-Ranges: bytes
配置文件是nginx的重点,服务的相关设置几乎全都是由配置文件定义的;
配置文件结构:
全局:该模块的配置是对于nginx服务全局生效的,于配置文件最上面几行进行配置;
events:nginx事件模块的配置,主要配置工作模式以及网络连接;
http:可包含多个server模块;
upstream:配置负载均衡相关;
server:虚拟主机配置,可包含多个location模块;
location:配置对页面的请求处理;
... ...
events {
... ...
}
http {
... ...
upstream ... ...{
... ...
}
upstream ... ...{
... ...
}
server {
... ...
location ... ... {
... ...
}
}
server {
... ...
location ... ... {
... ...
}
location ... ... {
... ...
}
}
}
当有更多需要的时候,可以前往官网:http://nginx.org/en/docs/ 页面下方的 Modules reference 模块参考,有nginx全面的参数详解;
文档格式基本是下面这样的:
Syntax(使用语法): | client_body_timeout |
---|---|
Default(默认值): |
client_body_timeout 60s; |
Context(作用域,语境): | http , server , location |
Defines a timeout for reading client request body. The timeout ......(相关的用法及解释)
这里我改的一个模板,并注上相应的解释,是我当前对应PHP的一些设置;
黑色的是已经开启的设置,灰色是注释和一些没有开启的设置,还有很多配置没有写上,比如很多的优化,这个是基本保持运行,优化针对实际情况调整;
配置文件的整体,个人认为重点还是厘清 全局、http、server、location 之间的关系;掌握整体配置文件每个模块的作用和相互关系,再结合官方文档去填写调整配置选项;
##全局配置模块 #user nobody; ##指定运行nginx的用户,一般都时默认的,或者是nginx worker_processes 8; ##给nginx分配线程的数量,值要 <= 本机CPU的线程数 #worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; ##为每个线程分配CPU worker_rlimit_nofile 65535; ##worker进程最大打开文件数 error_log logs/error.log; ##错误日志的路径,可以是绝对路路径,也可以相对路径,相对于nginx的根目录 #error_log logs/error.log notice; ##错误日志级别,级别有[debug | info | notice | warn | error | crit | alert | emerg],设置的级别会包含本身及之上级别的日志信息 #pid logs/nginx.pid; ##进程号文件位置 ##事件模块 events { use epoll; ##使用epoll的I/O多路复用模型,Linux用该选项 worker_connections 10240; ##每个线程处理的最大连接数 multi_accept on; ##收到一个新连接通知后接受尽可能多的连接 } ##HTTP配置模块 http { include mime.types; ##包含的文件拓展名和文件类型的映射表 default_type application/octet-stream; ##默认的文件传输流,二进制 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; ##访问日志的路径及格式,上面的log_format是其默认的格式,可以修改自己定义 sendfile on; ##高效文件传输模式 #tcp_nopush on; ##防止网络阻塞 keepalive_timeout 300; ##长连接的超时时间,单位为秒 gzip on; ##开启传输压缩 gzip_min_length 1k; ##允许压缩的页面最小字节数,若设置为0是所有页面都压缩,小于1k的时候会有负面影响 gzip_buffers 4 16k; ##系统获取指定单位倍数的缓存用于gzip的压缩结果数据流,此设置含义为以16k为单位,4倍的值申请内存 #gzip_http_version 1.0; ##识别的http的协议版本,默认即可 gzip_comp_level 2; ##gzip的压缩等级,1压缩率最小处理最快,9压缩率最大处理最慢 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; ##压缩的类型,匹配MIME类型进行压缩 #gzip_proxied off; ##设置后端服务器返回结果,默认关闭即可 gzip_vary on; ##根据客户端的HTTP头信息判断是否需要压缩,适用于代理服务器使用 gzip_disable "MSIE [1-6]\."; ##设置IE6及以下版本浏览器禁用gzip功能,其他浏览器正常启用 fastcgi_intercept_errors on; ##是否传递4xx和5xx的错误信息到客户端,或使用error_page处理错误信息,必须明确的在error_page中指定处理方法才能生效 server_names_hash_max_size 512; ##设置服务器名称哈希表的最大大小 server_names_hash_bucket_size 128; ##设置服务器名称哈希表的存储桶大小 ##虚拟主机配置 server { listen 80; ##监听端口 server_name localhost; ##访问域名 access_log /usr/local/nginx/logs/80_access.log; ##指定此虚拟主机access日志的路径 error_log /usr/local/nginx/logs/80_error.log; ##指定此虚拟主机error日志的路径 return 403; ##返回的403,这里设置是访问默认的80端口会返回403页面 charset koi8-r; ##支持的字符集 #access_log logs/host.access.log main; #error_page 404 403 500 502 503 504 /404.html; #location = /404.html { #root /home/www-data/error/; #} ##定义此虚拟主机的根路径 location / { ##nginx跨域设置,响应数据时告诉浏览器的头信息 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; root html; ##使用根目录的位置,相对于nginx安装根目录 include /usr/local/nginx/proxy.conf; ##该虚拟主机引用的其他配置文件,若时相对路径,是相对于nginx.conf的位置 index index.php index.html index.htm; client_max_body_size 50m; ##客户端上传文件大小限制 } #error_page 404 /404.html; ##设置指定错误消息返回的URL页面 # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; ##设置指定错误消息返回的URL页面 location = /50x.html { ##改location是设置50x.html的路径位置 root html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~* \.php$ { root /test/dir1/; ##指定php的根目录 fastcgi_pass 127.0.0.1:9000; ##代理fastcgi,php-fpm的默认端口是9000 fastcgi_index index.php; ##fastcgi的索引页 client_max_body_size 50m; include fastcgi_params; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ##反向代理,使用proxy_set_header,通过X-Forwarded-For获得用户IP fastcgi_param SCRIPT_FILENAME /test/dir1$fastcgi_script_name; ##脚本文件请求的路径 fastcgi_param SCRIPT_NAME $fastcgi_script_name; ##脚本名称 if ($fastcgi_script_name ~ \..*\/.*php){ ##防止恶意脚本传递给后端php解析,匹配到的请求返回403 return 403; } } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { ##匹配目录下指定的文件,开放或关闭对其的访问 # deny all; ##全部拒绝,也可以指定IP或者网段,allow是指定允许访问,设置规则和deny一样 #} } ##虚拟主机ssl配置 server { listen 443 ssl; ##开放监听端口,并开启ssl,即https server_name www.443.com; access_log /usr/local/nginx/logs/443_access.log; error_log /usr/local/nginx/logs/443_error.log; root /test/dir2; ssl_certificate /usr/local/nginx/conf/cert/filename.pem; ##ssl证书pem文件的位置 ssl_certificate_key /usr/local/nginx/conf/cert/filename.key; ##ssl证书key文件的位置 ssl_session_cache shared:SSL:1m; ##设置存储session参数的缓存类型和大小 ssl_session_timeout 5m; ##设置session重用会话缓存中ssl参数的过期时间 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ##使用的加密套件 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ##启用加密协议 ssl_prefer_server_ciphers on; ##设置协商加密算法时,优先使用服务端的加密套件 location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$query_string; ##重定向,支持CodeIgniter框架 } location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /test/dir2/$fastcgi_script_name; fastcgi_split_path_info ^(.+\.php)(.*)$; ##通过fastcgi_split_path_info来获取PATH_INFO的值 fastcgi_param PATH_INFO $fastcgi_path_info; ##上面获取的值自动重新赋值给$fastcgi_path_info变量 client_max_body_size 50m; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; include fastcgi_params; } location ~* \.(png|jpeg|jpg|bmp|gif|ico|js|css|scss){ ##静态文件读取硬盘,可以解决反向代理后静态资源无法加载的问题 expires 3d; ##资源缓存过期时间 } } ##设置访问http强制跳转https server { listen 80; ##对监听端口为80的 ↓ server_name www.443.com; ##域名为www.443.com的 ↓ rewrite ^(.*)$ https://$host$1 permanent; ##http请求,重定向到https } }
------------------------------------------------------------------------------------------------------------------------
这里添加 REQUEST_ID 的目的十为了关联 nginx的请求,PHP日志以及SQL请求的日志,因为没有 REQUEST_ID 的时候分不清楚哪个请求和SQL是关联的,在查找日志的时候不能明确状况;
##主要涉及到一下两个配置文件 [root@localhost ~]# cd /usr/local/nginx/conf/ [root@localhost conf]# ls -l {nginx.conf,fastcgi_params} -rw-r--r-- 1 root root 1054 Sep 5 22:20 fastcgi_params -rw-r--r-- 1 root root 8622 Sep 13 17:04 nginx.conf
##在 fastcgi_params 配置文件中添加下面一行配置 [root@localhost conf]# vim fastcgi_params ... ... fastcgi_param HTTP_REQUEST_ID $request_id ... ... ... ... ##在配置文件 nginx.conf 中 server虚拟主机模块中的 location添加配置 [root@localhost conf]# vim nginx.conf ... ... http { ... ... ##日志格式要添加上 $http_x_forwarded_for - $request_id ,否则日志中不记录 log_format main '$http_x_forwarded_for - $request_id $remote_addr - $remote_user [$time_local] "$request" ' ... ... ... ... ##在要记录 request_id 的虚拟主机模块的 location 中添加 server { ... ... location / { fastcgi_param REQUEST_ID $request_id; index index.php index.html index.htm; ... ... } } }
之后记得 /usr/local/sbin/nginx -t && /usr/loca/sbin/nginx -s reload 重载下配置文件;
如果你是yum安装,那么你就直接拥有一个日志滚动文件 /etc/logrotate.d/nginx ,但若是编译安装,就需要自己动手了;
不会写的话没问题,我们可以从测试的虚拟机中yum安装一个nginx,然后把现成的滚动文件拿过来,再进行修改;
[root@localhost ~]# vi /etc/logrotate.d/nginx ##日志位置,这是默认的yum安装路径,我们可以根据自己的配置文件来定义日志的路径 /var/log/nginx/*.log { daily ##日志滚动的周期,每天,选项还有weekly,monthly,yearly size 100M ##日志超过指定大小时切换,单位K,M,G,优先级高于daily dateext ##日志文件切换以日期形式后缀命名 dateformat -%Y-%m-%d ##切换后的日志文件格式,可以不写,使用默认的 missingok ##如果日志文件丢了,也不进行报错,继续切换 rotate 52 ##保存日志的滚动次数,超过时间进行删除,这里我们按照每天滚动,这么设置就是52天 compress ##切换日志后压缩,另一个选项是nocompress,不进行压缩 delaycompress ##切换日志时对上次的日志文件进行压缩 notifempty ##日志为空时不进行切换,默认为ifempty create 640 nginx nginx ##创建新日志文件的权限和用户 sharedscripts ##所有的文件切割之后只执行一次下面脚本 postrotate ##下面nginx.pid的实际位置根据实际情况修改 if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
正常情况下无需进行crontab定时任务配置,因为logrotate系统已经是设置好的;
之后我们可以尝试着,手动进行一次,看看是否可用:
[root@localhost ~]# cd /usr/local/nginx/logs/ [root@localhost logs]# ls access.log error.log nginx.pid [root@localhost logs]# /usr/sbin/logrotate /etc/logrotate.conf --force [root@localhost logs]# ls access.log access.log-20210327 error.log error.log-20210327 nginx.pid
1、对站点下目录进行访问控制(例如禁止访问 .git 和 .svn 目录)
该漏洞会造成网站下各个没有设置访问限制的目录及文件被下载,由于根目录下有代码管理工具,存在 git 和 svn 的信息泄露导致网站源码全部被下载,所以要对目录进行访问控制;
方法是在 nginx.conf 中配置相关的路径权限;
##例如我们禁止所有隐藏目录的访问 ##若不进行设置,目录被扫描后,访问指定文件,浏览器会下载该文件 ##设置后 -s reload 重载配置文件,再次访问改目录,返回403 location ~ (/\.) { deny all; }
------------------------------------------------------------------------------------------------------------------------
2、启用了TLS1.0,不被视为 PCI 数据安全标准,需要升级TLS版本(升级openssl)
需要升级openssl并重新编译nginx,当然,若你是新安装Nginx,可以在安装前就处理掉这个问题;
前往至我的另一篇随笔:升级openssl并重新编译Nginx - 感觉不妥 - 博客园 (cnblogs.com)
------------------------------------------------------------------------------------------------------------------------
3、远程主机支持具有弱或不安全特性的 TLS/SSL 密码套件
处理该漏洞,我的是已经完成第2项的openssl升级,以支持TLS1.2和TLS1.3,因为我把所有密码套件都换成这两个版本所支持的;
主要是对 nginx.conf 中的 ssl_ciphers 配置项进行调整
首先完成:
2、启用了TLS1.0,不被视为 PCI 数据安全标准,需要升级TLS版本(升级openssl)
##查看当前openssl所支持的所有密码套件 [root@kafka-test ~]# openssl ciphers -V | column -t 0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD 0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD 0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD 0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD 0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD 0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD 0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD 0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD 0xCC,0xAA - DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD 0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD 0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD 0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD 0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 0x00,0x6B - DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256 0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 0x00,0x67 - DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 0xC0,0x0A - ECDHE-ECDSA-AES256-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1 0xC0,0x14 - ECDHE-RSA-AES256-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 ... ... ... ... ##修改 nginx.conf 配置 [root@kafka-test ~]# vim /usr/local/nginx/conf/nginx.conf ... ... ##禁止低版本的TLS,仅启用1.2和1.3版本 ssl_protocols TLSv1.2 TLSv1.3; ... ... ##修改 ssl_ciphers ,来指定使用的密码套件 ssl_ciphers TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:TLS_CHACHA20_POLY 1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA
384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY13
05:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA25
6:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA
-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE:AES:HIGH:!aNULL:!e
NULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
------------------------------------------------------------------------------------------------------------------------
在修复上面第2、3项后,该漏洞也随之修复;
完成:
2、启用了TLS1.0,不被视为 PCI 数据安全标准,需要升级TLS版本(升级openssl)
3、远程主机支持具有弱或不安全特性的 TLS/SSL 密码套件
------------------------------------------------------------------------------------------------------------------------
修改 nginx.conf 中 server_name 的配置;
## 80 端口设置 [root@kafka-test ~]# vim /usr/local/nginx/conf/nginx.conf ... ... ... ... server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 403; ... ... ... ... ## 443 端口设置 server { listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name _; ssl_certificate ***.pem; ssl_certificate_key ***.key; return 403; ... ... ... ...
server { listen 443 ssl; server_name www.web1.com; ssl_certificate ***.pem; ssl_certificate_key ***.key; ... ... ... ...
------------------------------------------------------------------------------------------------------------------------
6、配置WS/WSS(WebSocket或Web Socket Secure)
该项配置在 location 模块中:
location / {
#如果是指定的目录请修改 / 路径
#这里的 proxy_pass 注释掉是本身我的这个目录是web页面,还需要访问
#去掉注释,打开的话,访问改虚拟主机的地址会提示 WebSocket 相关,并不是配置的web页面
#这里根据自己需求进行调整
#proxy_pass https://172.17.0.10:7332;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
... ...
... ...
}
------------------------------------------------------------------------------------------------------------------------
7、设置HttpOnly Secure SameSite 以解决 Cookie 跨域丢失问题
该项可配置在 http、server 和 location 模块中:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_path / "/; httponly; secure; SameSite=None";
------------------------------------------------------------------------------------------------------------------------
需要在配置文件中添加 X-Frame-Options,在http、server、location均可进行配置;
但不要重复配置,例如:在 http 中设置之后,又在 server 中进行设置,这样会出现2个信息;
建议在 server 中进行设置;
#表示该页面不允许在frame中展示,全部禁用 add_header X-Frame-Options DENY #表示该页面可以在相同域名页面的frame中展示,即相同域名下的页面均可 add_header X-Frame-Options SAMEORIGIN #表示该页面可以在指定来源的frame中展示,即指定域名,其可以与 SAMEORIGIN 同时使用 add_header X-Frame-Options "ALLOW-FROM https://???.***.com";
------------------------------------------------------------------------------------------------------------------------