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格式日志不支持自定义
相关推荐
运维&陈同学1 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
是阿建吖!1 小时前
【Linux】进程状态
linux·运维
hzyyyyyyyu1 小时前
内网安全隧道搭建-ngrok-frp-nps-sapp
服务器·网络·安全
网络研究院1 小时前
国土安全部发布关键基础设施安全人工智能框架
人工智能·安全·框架·关键基础设施
明明跟你说过2 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Daniel 大东3 小时前
BugJson因为json格式问题OOM怎么办
java·安全
Mr_Xuhhh3 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
EasyNVR7 小时前
NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案
安全·音视频·监控·视频监控
黑客Ash10 小时前
【D01】网络安全概论
网络·安全·web安全·php
朝九晚五ฺ10 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习