分享个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]