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格式日志不支持自定义
相关推荐
jugt1 小时前
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
linux·运维·centos
hunter1272 小时前
Nginx 事件驱动理解
nginx
21号 13 小时前
9.进程间通信
linux·运维·服务器
搬码临时工8 小时前
电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
运维·服务器·网络
藥瓿亭8 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
Web极客码8 小时前
如何轻松、安全地管理密码(新手指南)
计算机网络·安全·web安全·网络安全
Gaoithe8 小时前
ubuntu 端口复用
linux·运维·ubuntu
安全系统学习9 小时前
【网络安全】Qt免杀样本分析
java·网络·安全·web安全·系统安全
Bruce_Liuxiaowei10 小时前
文件上传漏洞深度解析:检测与绕过技术矩阵
安全·矩阵·文件上传漏洞
gsls20080810 小时前
ocrapi服务docker镜像使用
运维·docker·容器