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 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
Michaelwubo2 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
努力--坚持2 小时前
电商项目-网站首页高可用(一)
nginx·lua·openresty
好像是个likun2 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
Clockwiseee4 小时前
php伪协议
windows·安全·web安全·网络安全
黑客Ash5 小时前
安全算法基础(一)
算法·安全
云云3215 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3215 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵