51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Nginx安全配置

Nginx 是最流行的 Web 服务器,可以只占用 2.5 MB 的内存,却可以轻松处理 1w 的 http 请求。做为网站的入口,Nginx 的安全设置重要性不言而喻。

下面带你一起去认识一下这些安全配置吧!

nginx.conf是 Nginx 最主要的配置文件,大部分的安全配置都在这个文件上进行。

Nginx安全配置

隐藏nginx版本信息

在 nginx.conf 中配置

http {
  ...

隐藏版本信息

server_tokens off;

... }


就可以去掉nginx版本信息了

隐藏nginx版本

隐藏powered-by

输出的 x-powered-by 也会泄露网站信息,通过 proxy_hide_header 指令隐藏它。
···
location / {
...

隐藏powered-by

proxy_hide_header X-Powered-By;
...
}
···

相关安全设置

CSP 通过指定允许浏览器加载和执行那些资源,使服务器管理者有能力减少或消除 XSS 攻击的可能性

add_header  Content-Security-Policy  "default-src 'self'; img-src 'self' *.alicdn.com; object-src 'none'; script-src 'self' *.alicdn.com; style-src 'self' *.alicdn.com; frame-ancestors 'self'; base-uri 'self'; form-action 'self'";

X-Content-Type-Options 响应头相当于一个提示标志,被服务器用户提示浏览器一定要遵循 Content-Type 头中 MIME 类型的设定,而不能对其进行修改。

add_header  X-Content-Type-Options nosniff;

Strict-Transport-Security(HSTS)`告诉浏览器该站点只能通过 HTTPS 访问,如果使用了子域,也建议对任何该站点的子域强制执行此操作。

add_header  Strict-Transport-Security "max-age=31536000; includeSubDomains";

给浏览器指示允许一个页面可否在frame嵌入

DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许
SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示
ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。

add_header  X-Frame-Options SAMEORIGIN;

跨域访问

add_header  Access-Control-Allow-Origin *;
add_header  Access-Control-Allow-Origin *.xx.com;

xss攻击防护

add_header  X-XSS-Protection  "1; mode=block";

cookie读取设置

add_header  Set-Cookie "Path=/; HttpOnly; Secure";

反向代理时要设置参数解决Cookie跨域丢失

proxy_cookie_path / "/; httponly; secure; SameSite=None";

跨域请求设置

通过配置Access-Control-Allow-Origin参数可以指定哪些域可以访问你的服务器,这个值要么是要么是带协议端口号确定的值,.xx.com都是错误的值。

  set $cors "";
  if ($http_origin ~* (.*\.atpool.com)) {
    set $cors $http_origin;
  }
  add_header Access-Control-Allow-Origin $cors;
  add_header Access-Control-Allow-Methods "GET,POST,OPTIONS,DELETE,PUT";
  add_header Access-Control-Allow-Credentials true;
  add_header Access-Control-Allow-Headers *;
  if ($request_method = "OPTIONS") {
    return 204;
  }

完整的配置如下

server {
  listen  80;
  server_name test.xx.com;

证书设置

ssl_certificate cert/xx.com.pem; ssl_certificate_key cert/xx.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

只启用TLS1.2 以上

ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;

安全相关设置

add_header Content-Security-Policy "default-src 'self' *.xx.com data: 'unsafe-inline';"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Set-Cookie "Path=/; HttpOnly; Secure"; add_header Cache-Control max-age=86400;

跨域设置

set $cors ""; if ($http_origin ~* (.*.xx.com)) { set $cors $http_origin; } add_header Access-Control-Allow-Origin $cors; add_header Access-Control-Allow-Methods "GET,POST,OPTIONS,DELETE,PUT"; add_header Access-Control-Allow-Credentials true; add_header Access-Control-Allow-Headers *; if ($request_method = "OPTIONS") { return 204; }

location / { gzip on; gzip_comp_level 6; gzip_min_length 1k; gzip_buffers 4 16k; gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/json application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;

proxy_pass   http://127.0.0.1:8000;
proxy_hide_header   X-Powered-By; # 隐藏 powered-by
proxy_cookie_path   / "/; httponly; secure; SameSite=None";
proxy_set_header    X-Real-IP        $remote_addr;
proxy_set_header    X-Forwarded-For  $remote_addr;
proxy_set_header    X-Forwarded-Proto $scheme;
proxy_set_header    Host $http_host;
proxy_redirect      default;

}

}


赞(2)
未经允许不得转载:工具盒子 » Nginx安全配置