定位 发表于 2023-7-7 13:38:40

分享个Nginx安全配置

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

这些安全配置吧!

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



版本信息
在 nginx.conf 中配置

http {

  ...



  # 隐藏版本信息

  server_tokens off;



  ...

}
就可以去掉nginx版本信息了



隐藏powered-by
输出的x-powered-by也可能网站泄露信息,通过proxy_hide_header指令隐藏它。
···

location / {

...

# 隐藏powered-by

proxy_hide_header X-Powered-By;

...

}

···
相关安全设置
CSP通过指定允许浏览器加载并执行这些资源,使服务器管理员有能力减少或消除XSS攻击的可能性
add_header 内容安全策略“default-src 'self'; img-src '自我' *.alicdn.com; 对象-src'无';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 严格传输安全“max-age=31536000;includeSubDomains”;
给浏览器指示允许一个页面可否在帧嵌入
DENY 表示该页面不允许在帧中显示,提升为在相同域名的页面中显示也不允许
SAMEORIGIN 表示该页面可以在相同域名的帧中显示
ALLOW- FROM uri表示该页面可以在指定来源的框架中显示。
add_header X-Frame-Options SAMEORIGIN;
跨域访问
add_header 访问控制允许来源 *;

add_header Access-Control-Allow-Origin *.xx.com;
xss攻击防护
add_header X-XSS-保护“1;模式=阻止”;
cookie读取设置
add_header Set-Cookie "Path=/; HttpOnly; 安全";
反向代理时要设置参数解决Cookie跨域丢失
proxy_cookie_path / "/; httponly; secure; SameSite=None";
跨域请求设置
通过配置Access-Control-Allow-Origin参数可以指定哪些域可以访问你的服务器,这个值或者是或者是带协议端口号确定的值,.xx.com都是错误的值。
设置$cors“”;

  if ($http_origin ~* (.*\.atpool.com)) {

    设置 $cors $http_origin;

  add_header

  访问控制允许来源 $cors;

  add_header 访问控制允许方法“GET、POST、OPTIONS、DELETE、PUT”;

  add_header Access-Control-Allow-Credentials true;

  add_header 访问控制允许标头 *;

  if ($request_method = "选项") {

    返回 204;

  }
完整配置如下
服务器{

  听80;

  服务器名称 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 开启;

  

  # 安全相关设置

  add_header Content-Security-Policy "default-src 'self' *.xx.com data: 'unsafe-inline';";

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

  add_header X-Frame-Options SAMEORIGIN;

  add_header X-Content-Type-Options nosniff;

  add_header X-XSS-保护“1;模式=阻止”;

  add_header Set-Cookie "Path=/; HttpOnly; 安全";

  add_header 缓存控制 max-age=86400;

  

  # 跨域设置

  set $cors "";

  if ($http_origin ~* (.*\.xx.com)) {

    设置 $cors $http_origin;

  add_header

  访问控制允许来源 $cors;

  add_header 访问控制允许方法“GET、POST、OPTIONS、DELETE、PUT”;

  add_header Access-Control-Allow-Credentials true;

  add_header 访问控制允许标头 *;

  if ($request_method = "选项") {

    返回 204;

  }



  位置/{

    gzip 打开;

    gzip_comp_level 6;

    gzip_min_length 1k;

    gzip_buffers 4 16k;

    gzip_types 文本/普通应用程序/x-javascript 文本/css 应用程序/xml 应用程序/javascript 应用程序/json 应用程序/vnd.ms-fontobject 字体/ttf 字体/opentype 字体/x-woff 图像/svg+xml;



    proxy_pass    http://127.0.0.1:8000;

    proxy_hide_header X-Powered-By;# 隐藏由 proxy_cookie_path 提供支持的

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

    proxy_set_header X-真实IP $remote_addr;

    proxy_set_header X-Forwarded-For $remote_addr;

    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header 主机 $http_host;

    proxy_redirect 默认值;

  }



}

服务器 {

  监听 80;

  服务器名称 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 开启;

  

  # 安全相关设置

  add_header Content-Security-Policy "default-src 'self' *.xx.com data:

  '不安全内联';"; add_header 严格传输安全 "max-age=31536000; 始终包含子域”;

  add_header X-Frame-Options SAMEORIGIN;

  add_header X-Content-Type-Options nosniff;

  add_header X-XSS-保护“1;模式=阻止”;

  add_header Set-Cookie "Path=/; HttpOnly; 安全";

  add_header 缓存控制 max-age=86400;

  

  # 跨域设置

  set $cors "";

  if ($http_origin ~* (.*\.xx.com)) {

    设置 $cors $http_origin;

  add_header

  访问控制允许来源 $cors;

  add_header 访问控制允许方法“GET、POST、OPTIONS、DELETE、PUT”;

  add_header Access-Control-Allow-Credentials true;

  add_header 访问控制允许标头 *;

  if ($request_method = "选项") {

    返回 204;

  }



  位置/{

    gzip 打开;

    gzip_comp_level 6;

    gzip_min_length 1k;

    gzip_buffers 4 16k;

    gzip_types 文本/普通应用程序/x-javascript 文本/css 应用程序/xml 应用程序/javascript 应用程序/json 应用程序/vnd.ms-fontobject 字体/ttf 字体/opentype 字体/x-woff 图像/svg+xml;



    proxy_pass    http://127.0.0.1:8000;

    proxy_hide_header X-Powered-By;# 隐藏由 proxy_cookie_path 提供支持的

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

    proxy_set_header X-真实IP $remote_addr;

    proxy_set_header X-Forwarded-For $remote_addr;

    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header 主机 $http_host;

    proxy_redirect默认值;

  }



}


页: [1]
查看完整版本: 分享个Nginx安全配置