应用布署基础检查点(后端Laravel)

简介

布署到生产环境跟开发环境有显著的区别,一个关注性能和安全,一个关注开发效率。若是将开发环境直接布署到线上,经常会出现敏感信息泄露和性能低下的问题。所以这里简单介绍布署到生产环境的一些基础检查点,分红如下几部分讨论:javascript

  1. nginx配置
  2. php.ini配置
  3. Laravel应用配置
  4. 服务器SSH使用密钥登录

nginx配置

  • 不显示nginx版本
  • 开启gzip压缩
  • 工做进程数与CPU核数一致
  • 禁止直接访问index.php

不显示nginx版本

当你发出请求时:php

curl -I https://codefriend.top
HTTP/1.1 200 OK
Server: nginx/1.16.7 <---出现该提示
Date: Tue, 01 Jun 2017 00:00:00 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.2.25

经过增长以下配置可关nginx版本提示。css

server_tokens off

须要注意,仍然会出现Server: nginx,想完全不显示这个信息,须要重编译nginx,具体见如下连接html

https://serverfault.com/questions/214242/can-i-hide-all-server-os-infojava

gzip压缩

正式环境必定要开gzip压缩,不然传输效率能够差十来倍,nginx增长以下配置:nginx

gzip on;
  gzip_disable "msie6";
  gzip_min_length 1k;
  gzip_comp_level 1;
  gzip_vary on;
  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif 
image/png;

工做进程数与CPU核数一致

服务器为4核就改为4,为8就改为8:laravel

worker_processes 4;

/etc/nginx/nginx.conf参考:

user www;
worker_processes 4;
pid /run/nginx.pid;
daemon off;
events {
  worker_connections  2048;
  multi_accept on;
  use epoll;
}

http {
  server_tokens off;
  gzip on;
  gzip_disable "msie6";
  gzip_min_length 1k;
  gzip_comp_level 1;
  gzip_vary on;
  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif 
image/png;
# 省略其余配置
}

禁止直接访问index.php

许多攻击的构造方式是/index.php?c=homecontroncller&a=login的这种方式去尝试,所以直接关闭对php的直接访问是有必要的。后端

server {
    listen 80;
    listen [::]:80;
    server_name localhost;
    root /var/www;
    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        internal; # 重点要设置成内部,访问*.php时能够直接返回404
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

参考文件:api

https://stackoverflow.com/questions/47379091/nginx-block-access-to-php-files安全

php.ini配置

当你发出请求时:

curl -I https://codefriend.top
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 01 Jun 2017 00:00:00 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.2.25 <---出现该提示

修改php.ini文件,便可关闭该提示

expose_php = Off

Laravel应用

  1. 配置成生产环境
  2. 关闭全部调试
  3. API发现500错误只返回Server Error信息

第1,2点,直接修改.env文件便可:

APP_ENV=production
APP_DEBUG=false
API_DEBUG=false

第3点,须要手动修改,可参考下如下连接:

https://stackoverflow.com/questions/47335709/laravel-dingo-api-only-log-500-error-never-send-error-details-via-api

Laravel应用进阶检查

  • 表单后端验证防止用户恶意刷数据
  • 路由检查是否存在未受权能够获得过多的资源

这2个没法经过简单检查配置解决,主要依赖于开发人员水平以及依赖于安全工具的检查。

服务器SSH使用密钥登录

使用密码登录SSH时,多我的使用时是没法区分出谁是谁的。可是使用密钥作无密码登录时,安全审计都有记录密钥的指纹,因而能够区分出某一个时间点的登录是谁。所以,对于生产环境,建议不使用密码登录,而用密钥作无密码登录。