Laravel 5.5 官方推荐 Nginx 配置学习

Laravel 5.5 版本官方放出了 Nginx 服务器的配置,中文文档:服务器配置 Nginxphp

server {
    listen 80;
    server_name example.com;
    root /example.com/public;

    add_header X-Frame-Options "SAMEORIGIN";   
    add_header X-XSS-Protection "1; mode=block"; 
    add_header X-Content-Type-Options "nosniff"; 

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }  
    location = /robots.txt  { access_log off; log_not_found off; }  

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

本身并不擅长 Nginx,相信不少朋友跟我同样,让咱们一块儿学习下 Nginx 的相关知识 : )html

1. add_header X-Frame-Options "SAMEORIGIN";

X-Frame-Options 响应头是用来给浏览器指示容许一个页面能否在 <frame>, <iframe> 或者 <object> 中展示的标记。网站可使用此功能,来确保本身网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。laravel

X-Frame-Options 有三个值:web

DENY浏览器

表示该页面不容许在 frame 中展现,即使是在相同域名的页面中嵌套也不容许。

SAMEORIGIN安全

表示该页面能够在相同域名页面的 frame 中展现。

ALLOW-FROM uri服务器

表示该页面能够在指定来源的 frame 中展现。

该响应头设置应该比较常见,以前国外客户的安全团队有使用工具扫描咱们项目的相关漏洞,其中就有这个 clickjacking 的问题,最终也是经过该设置来解决此问题。网络

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

XSS 是跨站脚本攻击,是比较常见的网络攻击手段,改字段指示浏览器是否为当前页面开启浏览器内建的 XSS 过滤机制。 1 表示容许过滤器,mode=block 指示浏览器在检测到 XSS 攻击后禁止加载整个页面。php7

参考文章: 先知XSS挑战赛 知识点提要工具

3. add_header X-Content-Type-Options "nosniff";

该响应头设置禁用浏览器对 Content-Type 类型进行猜想的行为。由于不少状况下服务器并无很好的配置 Content-Type 类型,所以浏览器会根据文档的数据特征来肯定类型,好比攻击者可让本来解析为图片的请求被解析为 JavaScript。

咱们发现以上三个比较常见的防攻击配置,仍是很是实用的,建议使用,以前咱们的服务器只使用了 add_header X-Frame-Options "SAMEORIGIN"; 配置。

4. 不记录 favicon.ico 和 robots.txt 日志

location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

favicon.ico 网站头像,默认是浏览器标签页上网站小图标以及收藏时显示的小图标。

若是未在html header中指定 favicon.ico 那么浏览器默认会去访问 http://xxx.com/favicon.ico , 不存在此文件的话,那么会致使404,同时会记录到 access_log 和 error_log 中。这种记录到日志文件中是没有必要性的,所以能够取消。

robots.txt 一般是搜索引擎蜘蛛(爬虫)会去爬取的文件,在行业规范中,蜘蛛去爬取一个网站的时候会首先爬取该文件来获知网站中哪些目录文件不须要爬取,在 SEO 中 robots.txt 的正确配置是对 SEO 很是有效果的。该文件也确实没有必要记录到日志中,并且大部分网站并不存在 robots.txt 文件。

以上这些配置是能够用在大部分的网站上的,不止是 Nginx 服务器,相信 Apache 服务器也有相关的配置,若是你正在用其余web服务器,以上相似的配置也建议使用。

讨论交流

联系咱们

相关文章
相关标签/搜索