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格式日志不支持自定义
相关推荐
万联WANFLOW1 分钟前
LiteLLM 1.107.0 投毒排查实战:依赖、Docker、CI 环境分别怎么查?
安全·docker·llm
kkkkkkkkkk_Z31 分钟前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
hz567891 小时前
企业视频会议系统方案:总部与分支机构高效协同如何落地?
运维·服务器·网络·安全·实时音视频·信息与通信
三垣网安1 小时前
漏洞实战|高校虚拟实验平台报错型 SQL 注入漏洞复现
网络·经验分享·sql·安全·web安全·网络安全·水平越权
sun153690275721 小时前
露天矿边坡滑坡怎么预警?QY-19GNSS 自动化地表位移监测系统介绍
运维·安全·自动化
长不大的杨瑞杰1 小时前
给 OpenCode v2 接入大模型:Provider、模型选择与 API Key 安全配置实战
人工智能·安全·ai·语言模型
云计算练习生2 小时前
什么是文件权限?Linux 中 rwx 与数字权限的对应关系
linux·运维·服务器·操作系统·文件权限管理
FY@-@2 小时前
VMware ESXi 7.0 实验全记录:嵌套安装 → 网络配置 → 存储 → Windows 10 虚拟机部署
运维·网络·windows·云计算
饿了吃洗衣凝珠2 小时前
red hat day2
linux·运维·服务器