这是我在实验室中使用的一些基本配置:
1.配置Nginx做负载均衡器
2.配置备份服务器
3.从黑客隐藏Nginx版本信息
4.在应用之前验证Nginx.conf配置
5.重新加载Nginx.conf而不重新启动服务
6.域重写
7.禁用过时的SSL / TLS协议
8.启用HTTPS
9.添加黑白名单
10。限制要求方法
11.拒绝用户代理
12图片防盗链
13.控制并发连接数
14.缓冲区溢出攻击
15.标题设置
16.反向代理基本配置
1.配置Nginx做负载均衡器
如果您有多个站点,则可以将Nginx配置为在多个服务器之间进行负载平衡。
您需要更改两个文件:
[email protected]:/# cat /etc/nginx/nginx.conf
user Nginx的;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http { upstream mysec {
ip_hash;
服务器 3.81.70.239:30000 weight=3;
服务器 34.73.78.142:80 weight=2;
}
include /etc/nginx/mime.types;
默认_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile 上;
#tcp_nopush 上;
keepalive_timeout 65;
#gzip 上;
include /etc/nginx/conf.d/*.conf;
}
[email protected]:/#
[email protected]:/# cat /etc/nginx/conf.d/wordpress.conf服务器{ listen 80; 服务器名称 万维网.51sec.org; location / { proxy_pass http://mysec; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } [email protected]:/#
http { upstream project1 { 服务器 127.0.0.1:8000 weight=3; 服务器 127.0.0.1:8001 weitht=2; 服务器 127.0.0.1:8002; } 服务器 { listen 80; 服务器名称 万维网.51sec.org; location / { proxy_pass http://project1; } } }
如果是Ubuntu系统,则在/ etc / Nginx的 / 网站启用上有一个默认文件。如果您已经在此文件夹下定义了wordpress配置文件,则可能要删除此默认文件。
sudo rm /etc/nginx/sites-enabled/default
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
sudo systemctl restart Nginx的
sudo /etc/init.d/nginx restart
sudo /etc/init.d/nginx重新加载
ip_hash参数不适用于备份命令。在以下配置中,直到服务器34.73.78.142不可用,服务器3.81.70.239才会被命中。
ip_hash平衡器不支持备份服务器和重量。
[email protected]:/# cat /etc/nginx/nginx.conf
.....
http { upstream mysec {
##ip_hash;
## 服务器 3.81.70.239:30000 weight=3;
服务器 34.73.78.142:80 weight=2;
服务器 3.81.70.239:30000 backup }
.....
3.从黑客隐藏Nginx版本信息
某些版本的nginx通常存在安全漏洞。隐藏nginx版本号已成为主要的安全优化方法之一。当然,最重要的是及时升级和修复漏洞。 更改之前:
vi /etc/nginx/nginx.conf
http {
服务器_tokens关闭;
}
启用server_token关闭后:
4.有效的Nginx.conf配置在应用之前
Nginx的 -t
5.重新加载Nginx.conf而不重新启动服务
Nginx的 -s重新加载
/etc/init.d/nginx重新加载
6.域重写
方法1:
方法2:
7.禁用过时的SSL / TLS协议
ssl_protocols TLSv1.1 TLSv1.2;
8.启用HTTPS
服务器{ 听443; 服务器名称 ops-coffee.cn; ssl 上; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers高:!空:! MD5; } ssl 上:启用https |
9. 添加黑白名单
白名单配置:
位置/管理员/ {
允许192.168.1.0/24;
否认一切;
}
上面的内容表明,仅允许访问192.168.1.0/24网段上的主机,而拒绝所有其他主机
也可以将其写为黑名单,以禁止某些地址并允许所有其他地址,例如
位置/行动咖啡/ {
拒绝192.168.1.0/24;
允许全部;
}
客户请求通常会经过代理层。我们需要通过$ http_x_forwarded_for来限制它们,可以这样写
将$ allow设置为false;
如果($ http_x_forwarded_for =“ 211.144.204.2”){set $ allow true;}
如果($ http_x_forwarded_for〜“ 108.2.66。[89]”){set $ allow true;}
如果($ allow = false){返回404;}
添加帐户身份验证
服务器{
位置 / {
auth_basic“请输入用户& passwd”;
auth_basic_user_file密钥/ auth.key;
}
}
10。 限制要求方法
如果($ request_method!〜^(GET | POST)$){
返回405;
}
$ request_method可以获取请求Nginx的方法
该配置仅允许GETPOST方法访问,其他方法返回405
11.拒绝用户代理
如果($ http_user_agent〜* LWP ::简单| BBBike | wget | 卷曲){
返回444;
}
可能有一些不法分子使用wget / 卷曲等工具扫描我们的网站,我们可以通过禁止相应的用户代理来简单地阻止它
Nginx的444状态非常特殊。如果返回444,则客户端将不会收到服务器返回的信息,就像网站无法连接一样。
12 图片防盗链
位置/图片/ {
valid_referers没有被阻止www.ops-coffee.cn ops-coffee.cn;
如果($ invalid_referer){
返回403;
}
}
valid_referers:验证引荐来源,其中没有一个允许引荐为空,而被阻止则允许没有协议的请求。除以上两种类型外,当www.ops-coffee.cn或ops-coffee.cn时,仅允许引用站点访问图像下的图像资源,否则返回403。
当然,您也可以将不符合参照规则的请求重定向到默认图像,例如以下内容
位置/图片/ {
valid_referers已被阻止www.ops-coffee.cn ops-coffee.cn
如果($ invalid_referer){
重写^ / images /.*。 (gif | jpg | jpeg | png)$ /static/qrcode.jpg最后;
}
}
您可以通过ngx_http_limit_conn_module模块限制IP的并发连接数
http {
limit_conn_zone $ binary_remote_addr zone = ops:10m;
服务器{
听80;
服务器名称 ops-coffee.cn;
root / home / project / webapp;
索引index.html;
位置 / {
limit_conn操作10;
}
access_log /tmp/nginx_access.log main;
}
}
limit_conn_zone:设置共享内存空间的参数,该参数用于保存每个键的状态(例如$ binary_remote_addr),zone =空间名称:大小
大小的计算与变量有关。例如,$ binary_remote_addr变量的大小为4个字节(用于记录IPV4地址)和16个字节(用于记录IPV6地址)。在32位平台上,存储状态占用32或64个字节。在64位平台上,占用64个字节。 1m共享内存空间可以节省大约32,000个32位状态和16,000个64位状态
limit_conn:指定一组共享内存空间(例如,名称为ops的空间),以及每个给定键值的最大连接数
上面的示例显示在同一IP上同时仅允许10个连接
当配置了多个limit_conn指令时,所有连接限制将生效
http {
limit_conn_zone $ binary_remote_addr zone = ops:10m;
limit_conn_zone $ 服务器名称 zone =咖啡:10m;
服务器{
听80;
服务器名称 ops-coffee.cn;
root / home / project / webapp;
索引index.html;
位置 / {
limit_conn操作10;
limit_conn咖啡2000;
}
}
}
以上配置不仅将单个IP源的连接数限制为10,而且将单个虚拟服务器的连接总数限制为2000。
14.缓冲区溢出攻击
缓冲区溢出攻击是通过将数据写入缓冲区边界之外的缓冲区并重写内存片段来实现的。限制缓冲区大小可以有效防止
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
client_body_buffer_size:默认值为8k或16k,表示客户端请求主体占用缓冲区大小。 如果连接请求超过了高速缓存中指定的值,则所有或部分这些请求实体将尝试写入临时文件。
client_header_buffer_size:客户端请求头的缓冲区大小。 在大多数情况下,请求标头不会大于1k,但是如果来自wap客户端的cookie很大,则它可能大于1k。 Nginx将为其分配更大的缓冲区。可以在large_client_header_buffers中设置此值。
client_max_body_size:指示客户端请求的最大可接受主体大小。它出现在请求标头的Content-Length字段中。如果请求大于指定的值,则客户端将收到“请求实体太大”(413)错误,通常在将文件上传到服务器时受到限制
large_client_header_buffers指示某些大型请求标头使用的缓冲区的数量和大小。默认缓冲区大小是操作系统中页面文件的大小,通常为4k或8k。请求字段不能大于缓冲区大小。如果客户端发送比较对于较大的标头,nginx将返回“请求URI太大”(414)。请求标头中的最长字段不能大于缓冲区,否则服务器将返回“错误请求”(400)
需要同时修改多个超时的配置
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
client_body_timeout:表示读取请求正文的超时时间。如果连接超过此时间并且客户端没有响应,则Nginx将返回“请求超时”(408)错误
client_header_timeout:表示读取客户端请求头的超时时间。如果连接超过此时间并且客户端没有响应,则Nginx将返回“请求超时”(408)错误
keepalive_timeout:该参数的第一个值指示客户端与服务器之间的长连接的超时时间。在此时间之后,服务器将关闭连接。可选的第二个参数参数指示Keep-Alive的值:timeout = time此值可使某些浏览器知道何时关闭连接,因此服务器不需要重复关闭。如果未指定此参数,nginx将不会在Response标头中发送Keep-Alive信息。
send_timeout:响应发送到客户端后的超时时间。超时是指尚未进入完全建立状态并且仅完成了两次握手的事实。如果客户端在此之后没有响应,则nginx将关闭连接。
15.标题设置
以下设置可以有效地防止XSS攻击
add_header X框架选项“ SAMEORIGIN”;
add_header X-XSS-Protection“ 1;模式=区块”;
add_header X-Content-Type-Options“ nosniff”;
X-Frame-Options:响应标头指示是否允许浏览器加载框架和其他属性。有三种配置。拒绝禁止嵌入任何网页。 SAMEORIGIN仅允许嵌套此网站,而ALLOW-FROM允许嵌套指定的地址。
X-XSS-Protection:指示启用XSS过滤(X-XSS-Protection:禁用0),mode = block指示如果检测到XSS攻击,页面将停止呈现
X-Content-Type-Options:响应标头用于为未指定或未正确指定的Content-Type资源指定浏览器的猜测行为。 Nosniff表示不允许猜测。
在通常的请求响应中,浏览器将根据Content-Type区分响应的类型,但是当未指定或未正确指定响应类型时,浏览器将尝试启用MIME嗅探以猜测响应类型。资源,这是非常危险的。
例如,.jpg图像文件被恶意嵌入了可执行的js代码。启用资源类型猜测功能后,浏览器将执行嵌入式js代码,这可能会带来意想不到的后果。
此外,还有一些关于请求标头的安全配置需要引起注意。
内容安全政策:定义可以在页面上加载哪些资源,
add_header内容安全策略“ 默认-src'self'”;
上面的配置将限制所有外部资源,并且只能从当前域名加载。 默认-src为所有类型的资源定义默认的加载策略,并且self允许来自同一源的内容。
严格的传输安全性:告诉浏览器使用HTTPS协议而不是HTTP来访问目标站点
add_header严格传输安全性“最大年龄= 31536000; includeSubDomains”;
上面的配置表明,当用户首次访问时,将返回一个包含Strict-Transport-Security响应标头的字段。该字段将告诉浏览器,在接下来的31536000秒内,对当前网站的所有请求都将使用https协议访问,参数includeSubDomains是可选的,这意味着所有子域也将采用相同的规则
16. Nginx用作反向代理
Nginx
反代配置,直接添加到配置文件即可。