作者:SRE运维博客
博客地址:https://www.cnsre.cn
文章地址:https://www.cnsre.cn/posts/210810958573/
相关话题:https://www.cnsre.cn/tags/nginx/
Nginx
是用于 Web
服务、反向代理、缓存、负载平衡、媒体流等的开源软件。在这将提到一些经常使用的 Nginx
经典配置以及安全性的一些配置。请根据您的实际需求对这些配置进行调整。
侦听端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
server {
# 标准HTTP协议
listen 80;
# 标准HTTPS协议
listen 443 ssl;
# 使用 http2
listen 443 ssl http2;
# 使用IPv6 监听 80
listen [::]:80;
# 仅限使用IPv6
listen [::]:80 ipv6only=on;
}
|
访问日志
1
2
3
4
5
6
7
|
server {
# 日志文件的相对或完整路径
access_log /path/to/file.log;
# 选择 'on' 或者 'off'
access_log on;
}
|
域名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
server {
# 监听单个域名
server_name cnsre.cn;
# 监听多个域名
server_name cnsre.cn www.cnsre.cn;
# 监听所有域名
server_name *.cnsre.cn;
# 监听所有顶级域名
server_name cnsre.*;
# 监听未指定的主机名(侦听IP地址本身)
server_name "";
}
|
静态资源
1
2
3
4
5
6
7
8
|
server {
listen 80;
server_name cnsre.cn;
location / {
root /path/to/website;
}
}
|
重定向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
server {
listen 80;
server_name www.cnsre.cn;
return 301 http://cnsre.cn$request_uri;
}
server {
listen 80;
server_name www.cnsre.cn;
location /redirect-url {
return 301 http://otherdomain.com;
}
}
|
反向代理
1
2
3
4
5
6
7
8
9
10
|
server {
listen 80;
server_name cnsre.cn;
location / {
proxy_pass http://0.0.0.0:3000;
# 其中 0.0.0.0:3000 是您的应用程序服务器(例如:node.js)绑定在 0.0.0.0 上,监听端口 3000
}
}
|
负载均衡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
upstream node_js {
server 0.0.0.0:3000;
server 0.0.0.0:4000;
server 1.1.1.1;
}
server {
listen 80;
server_name cnsre.cn;
location / {
proxy_pass http://www.cnsre.cn;
}
}
|
SSL 协议
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
server {
listen 443 ssl;
server_name cnsre.cn;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/privatekey.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/fullchain.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_timeout 1h;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security max-age=15768000;
}
# HTTP 到 HTTPS 的永久重定向
server {
listen 80;
server_name cnsre.cn;
return 301 https://$host$request_uri;
}
|
禁止任何敏感的请求路径
1
2
3
4
5
6
7
8
9
|
location ~ /\.git {
deny all;
}
## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
deny all;
access_log off;
log_not_found off;
}
|
禁止不必要的 HTTP 请求方法
最常用的 HTTP 请求方法是 GET、POST、HEAD。对于任何其他未使用的方法,我们应该返回 444。
1
2
3
4
5
|
#只允许这些请求方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
# 不接受删除,搜索和其他方法
|
添加请求速率限制
限速 会拦截很多恶意请求,也是防御网站的网络级和应用级DDoS攻击的常用工具。我们可以为单个 IP 添加最大请求限制。
1
2
3
4
5
6
7
8
9
|
limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s;
server {
listen 80;
location / {
limit_req zone=ip burst=12 delay=8;
proxy_pass http://cnsre.cn;
}
}
|
点击劫持攻击
点击劫持攻击 会导致用户在不知不觉中下载恶意软件、访问恶意网页、提供凭据或敏感信息。
我们可以X-FRAME-OPTIONS
在 HTTP Header
中注入以防止点击劫持攻击(甚至可以通过某些方式绕过)。这是通过在 nginx.conf
文件中添加以下内容来实现的
1
|
add_header X-Frame-Options "SAMEORIGIN";
|
X-XSS 保护
注入具有 X-XSS
保护的 HTTP
标头以减轻跨站点脚本攻击。修改 nginx.conf
文件添加以下内容
1
|
add_header X-XSS-Protection "1; mode=block";
|
如果你还对安全标头感兴趣,点击这里了解这些标头。
作者:SRE运维博客
博客地址:https://www.cnsre.cn
文章地址:https://www.cnsre.cn/posts/210810958573/
相关话题:https://www.cnsre.cn/tags/nginx/