1.禁止在location字段对所有请求进行转发
xml
location / {
root html;
index index.html idindex.htm;
proxy_pass http://100.x.x.x:xxx/;
}
没有对url请求进行过滤,将所有请求转发到后台服务,会导致攻击类的URL被转发到后台,存在安全隐患
- 禁止使用stream模块
xml
srteam{
server{
Listen 12345;
Proxy_Pass 100.x.x.x:xxx;
}
}
不仅将TCP/UDP协议的请求进行转发,同时HTTP协议也会转发,并且不能进行URL过滤,存在安全隐患
- 反向代理配置规范
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;
}
}
}
- 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
-
Nginx启动用户配置规范
要求使用应用用户启动Nginx,将nginx.conf主配置文件第一行"#user nobody;" 修改为"user 对应应用用户"
-
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;
}
}
- nginx作为代理转发服务器时,如果Proxy_Pass配置的是上游服务器域名,当上游系统切换为单边后,由于nginx会永久缓存dns的解析结果,从而导致请求会继续发往已经被停掉的一边。
- 需要配置nginx服务器,将域名设置为变量,以变量形式进行访问。
- nginx安全配置
xml
autoindex off #关闭或不存在 显示网站目录及文件。线上配置不显示
server_tokens off #隐藏Http协议返回响应头内nginx的版本信息
nginx文件权限,主目录与主配置文件权限不高于775
删除默认html文件,例如nginx/html目录(默认文件50x.html,index.html)
- 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格式日志不支持自定义