Nginx运维规范及安全配置

1.禁止在location字段对所有请求进行转发

xml 复制代码
location / {
	root html;
	index index.html idindex.htm;
	proxy_pass http://100.x.x.x:xxx/;
}

没有对url请求进行过滤,将所有请求转发到后台服务,会导致攻击类的URL被转发到后台,存在安全隐患

  1. 禁止使用stream模块
xml 复制代码
srteam{
	server{
		Listen 12345;
		Proxy_Pass 100.x.x.x:xxx;
	}
}

不仅将TCP/UDP协议的请求进行转发,同时HTTP协议也会转发,并且不能进行URL过滤,存在安全隐患

  1. 反向代理配置规范
yml 复制代码
http {
    server {
        listen 80;
 		server_name test.com
        location /test {
            proxy_pass http://localhost:8080;
            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_set_header X-Forwarded-Proto $scheme;
        }
    }
}
  1. work_Processes数量配置规范
xml 复制代码
一般一个进程足够了,你可以把连接数设得很大。(worker_processes: 1,worker_connections: 10,000)
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。(worker_processes: CPU核心数)
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,以充分利用IO带宽(主要似乎是IO操作有block)

worker_processes,工作进程数
默认:worker_processes 1
调大:worker_processes CPU核心数(双核4线程,可以设置为4)

worker_connections,单个工作进程可以允许同时建立外部连接的数量数字越大,能同时处理的连接越多
默认:worker_connections 1024
调大:worker_connections 100000(调大到10万连接)
yml 复制代码
worker_processes 2; 
worker_rlimit_nofile 65535;
#pid logs/nginx.pid; 
events { 
   worker_connections 65535; 
}

Work_Processes数应与主机逻辑CPU数目保持一致

检查方法为 cat /Proc/cpuinfo | grep 'Processor' | wc -l

  1. Nginx启动用户配置规范

    要求使用应用用户启动Nginx,将nginx.conf主配置文件第一行"#user nobody;" 修改为"user 对应应用用户"

  2. DNS缓存问题配置规范

yml 复制代码
server{
	resolver 100.1.x.x 100.2.x.x ipv6=off valid=30s;
	resolver_timeout 3s;
	set $xxxdomain "xxxx.xx.io";
	location /xxx{
		Proxy_Pass http://$xxxdomain$/request-uri;
	}
}
  1. nginx作为代理转发服务器时,如果Proxy_Pass配置的是上游服务器域名,当上游系统切换为单边后,由于nginx会永久缓存dns的解析结果,从而导致请求会继续发往已经被停掉的一边。
  2. 需要配置nginx服务器,将域名设置为变量,以变量形式进行访问。
  1. nginx安全配置
xml 复制代码
autoindex off #关闭或不存在 显示网站目录及文件。线上配置不显示
server_tokens off #隐藏Http协议返回响应头内nginx的版本信息

nginx文件权限,主目录与主配置文件权限不高于775

删除默认html文件,例如nginx/html目录(默认文件50x.html,index.html)

  1. Nginx日志配置
xml 复制代码
配置access_log(访问日志)

访问日志记录了所有请求的信息,包括每个请求的详细信息,如请求时间、请求方法、请求URL、响应状态码、响应大小、客户端IP等。

#在http、server或location块中配置
access_log /var/log/nginx/access.log combined;

其中,"/var/log/nginx/access.log"是日志文件的路径,"combined"是日志格式,Nginx提供了默认的"combined"日志格式,也可以自定义日志格式。
xml 复制代码
配置error_log(错误日志)

错误日志记录了Nginx启动、运行或处理请求过程中遇到的错误信息。

 在http、server或location块中配置
error_log /var/log/nginx/error.log error;

其中,"/var/log/nginx/error.log"是日志文件的路径,"error"是日志级别,只记录错误信息。
xml 复制代码
自定义日志格式

除了使用默认的日志格式,还可以自定义日志格式。

 在http块中定义日志格式
http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
 
    # 在server或location块中使用自定义的日志格式
    access_log /var/log/nginx/access.log main;
}

在上面的例子中,自定义了一个名为"main"的日志格式,包含了请求的详细信息。然后在access_log中使用这个自定义的日志格式。

xml 复制代码
实际开发中,使用自定义日志
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
 
    # 在server或location块中使用自定义的日志格式
    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log error; #error格式日志不支持自定义
相关推荐
ajsbxi3 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
萨格拉斯救世主17 分钟前
戴尔R930服务器增加 Intel X710-DA2双万兆光口含模块
运维·服务器
Jtti20 分钟前
Windows系统服务器怎么设置远程连接?详细步骤
运维·服务器·windows
yeyuningzi34 分钟前
Debian 12环境里部署nginx步骤记录
linux·运维·服务器
EasyCVR1 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
wowocpp2 小时前
ubuntu 22.04 硬件配置 查看 显卡
linux·运维·ubuntu
jjyangyou2 小时前
物联网核心安全系列——物联网安全需求
物联网·算法·安全·嵌入式·产品经理·硬件·产品设计
萨格拉斯救世主3 小时前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
川石课堂软件测试3 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
AltmanChan3 小时前
大语言模型安全威胁
人工智能·安全·语言模型