nginx配置实战
静态网站 root 与 alias 的区别
配置如下2个location
location ^~ /tea/ {
root /data/html;
}
location ^~ /sta/ {
alias /data/static;
}
- 访问
http://test.com/tea/tea1.html>> /data/html/tea/tea1.html - 访问
http://test.com/sta/sta1.html>> /data/static/sta1.html
两者的区别
- root 实际访问文件路径会拼接 root + location
- alias 实际访问文件路径不会拼接location中的路径
二级目录
- 场景1:最简单的反向代理,访问 http://192.168.0.4/refresh 跳转到 http://192.168.0.16:8089/refresh
server {
listen 80;
server_name 192.168.0.4;
location / {
proxy_pass http://192.168.0.16:8089;
}
}
- 场景2:访问 http://192.168.0.4/yun/refresh 跳转到 http://192.168.0.16:8089/refresh
server {
listen 80;
server_name 192.168.0.4;
location /yun/ {
proxy_pass http://192.168.0.16:8089/;
}
}
反向代理与重定向
- 场景3:最简单的反向代理,访问 http://www.domain1.com 跳转到 http://192.168.0.16:8089
upstream smart{
server 192.168.0.58:8998
}
server {
listen 80;
server_name www.domain1.com;
location / {
proxy_pass http://smart;
}
}
- 场景4:全站反向代理,比如将自己的域名跳转到别人的接口(用于展示,不希望域名发生跳转)
server {
listen 80;
server_name www.domain1.com;
location ^~ / {
proxy_pass http://www.domain2.com;
}
}
- 场景5:301永久重定向(permanent),全站跳转到新域名(保留完整路径,老域名会跳转到新域名)
#.方法1
server {
listen 80;
server_name www.domain1.com;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;
}
#.方法2
server {
listen 80;
server_name www.domain1.com;
return 301 http://www.domain2.com$request_uri;
}
- 场景6:302临时重定向(redirect),全站跳转到新域名
server {
listen 80;
server_name www.domain1.com;
rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
}
漏扫出现的响应头缺失
- 针对漏扫出现下9个响应头缺失的问题:
1.检测到目标 Content-Security-Policy 响应头缺失
2.检测到目标 Referrer-Policy 响应头缺失
3.检测到目标 Strict-Transport-Security 响应头缺失
4.检测到目标 X-Content-Type-Options 响应头缺失
5.检测到目标 X-Download-Options 响应头缺失
6.点击劫持 X-Frame-Options 未配置
7.检测到目标 X-Permitted-Cross-Domain-Policies 响应头缺失
8.检测到目标 X-XSS-Protection 响应头缺失
9.检测到目标 X-Robots-Tag 响应头缺失
- 建议在 http{} 中添加如下配置:
http {
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'" always;
add_header Referrer-Policy "same-origin" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "sameorigin" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag "none" always;
proxy_hide_header X-Powered-By;
fastcgi_hide_header X-Powered-By;
}