Nginx常用配置

常用的Nginx配置,包括配置https,gzip,屏蔽敏感目录等。做个笔记。

HTTPS

配置https

上下文:`http

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443; # SSL端口号
server_name www.domain.com; # 域名
ssl on; # 启用SSL功能
ssl_certificate 1_www.domain.com_bundle.crt; #证书文件路径
ssl_certificate_key 2_www.domain.com.key; #私钥文件路径
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/nginx/html; # 网站主页
index index.html index.htm;
}
}

http请求强制重定向至https

上下文:http

1
2
3
4
5
server {     
listen 80;
server_name web-security.cn;
return 301 https://$server_name$request_uri;
}

配置GZip压缩

上下文:http, server, location

1
2
3
4
5
6
7
gzip  on;	#开启gzip
gzip_min_length 2k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 3; # 压缩级别
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;

pathinfo隐藏index.php

上下文:server

1
2
3
4
location / {
try_files $uri $uri/ /index.php?$args;
index index.php index.html index.htm;
}

Nginx反爬虫

​ 上下文:location

1
2
3
if ($http_user_agent ~* (AhrefsBot|DotBot|MJ12bot|httrack|Findxbot|BLEXBot|WinHttpRequest|Go\s1.1\spackage\shttp|megaindex|BIDUBrowser|FunWebProducts|MSIE\s5|Add\sCatalog|SeznamBot|KomodiaBot|aiHitBot|MojeekBot|PhantomJS|SiteSucker|HTTrack|MegaIndex|BLEXBot|LinkpadBot|Findxbot|SEOkicks|OpenLinkProfiler|PhantomJS|Xenu|007ac9|sistrix|spbot|SiteExplorer|wotbox|ZumBot|ltx71|memoryBot|WBSearchBot|DomainAppender|Python|Aboundex|-crawler|WinHttpRequest|NerdyBot|ZmEu|xovibot)) {
return 403;
}

防SQL注入

​ 上下文:server

1
2
3
4
5
6
7
8
9
10
11
12
if ($query_string ~ "union.*select.*") {
set $block_sql_injections 1;
}
if ($query_string ~ "union.*all.*select.*") {
set $block_sql_injections 1;
}
if ($query_string ~ "concat.*") {
set $block_sql_injections 1;
}
if ($block_sql_injections = 1) {
return 444;
}

Nginx禁止通过IP地址访问(只能通过域名访问)

上下文:http

1
2
3
4
5
server {
listen 80 default;
server_name _;
return 403;
}

Nginx 禁止访问敏感目录/文件

上下文: server

Nginx禁止访问敏感目录和文件,按照规范应该返回403错误。但这样存在一个安全隐患,即恶意用户可以通过判断响应代码来区分文件是否存在。返回404错误时,无法判断文件是否存在,是一个比较安全的做法。

禁止访问隐藏文件

1
location ~ \/\.  { return 404; }

以上配置可以隐藏.env.env.example.git.htaccess 等点号开头的隐藏文件,包括子目录中的隐藏文件。当请求这些隐藏文件时,返回404错误。

禁止访问指定目录

1
location ~ ^(/runtime|/log|/install) {return 404; }

以上配置禁止网站访问根目录(不包含子目录)中的runtimeloginstall目录。

禁止访问.log日志文件

1
location ~ \.log$ { return 404; }

以上配置禁止访问所有.log结尾的文件,包含网站根目录以及子目录。

Nginx 自定义错误页

上下文: http, server, location

1
2
error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;