09 Mar 2017
关于业务无关的nginx本身的安全注意点,详见安全 - 基础安全。
这里更关注一些业务相关的配置中的安全因素,比如说:
生产环境下,服务之间,一般都是使用指定的公网域名或者内部局域网域名来跨主机交互。基于此,禁止使用服务器IP访问nginx服务器的安全限制就成为了可能。
server {
listen 80 default_server;
server_name _;
return 444;
}
这里有几个要点:
$request_uri而不是$uri。目的是避免CRLF注入漏洞,因为$uri在跳转前会识别URL编码,而$request_uri不会。详情见nginx上演示CRLF注入漏洞server { listen 80 default_server; server_name _; return 307 https://$host$request_uri; }
简要解释
不要混淆
$server_name和$host,server_name就是我们配置的该server块的变量
仅允许常用的GET, POST
add_header Allow "GET, POST" always; if ( $request_method !~ ^(GET|POST)$ ) { return 405; }