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

简介

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

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

nginx配置

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

不显示nginx版本

当你发出请求时:

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版本提示。

server_tokens off

需要注意,仍然会出现Server: nginx,想彻底不显示这个信息,需要重编译nginx,具体见以下链接

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

gzip压缩

正式环境一定要开gzip压缩,否则传输效率可以差十来倍,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:

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;
    }
}

参考文件:

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时,多个人使用时是无法区分出谁是谁的。但是使用密钥做无密码登陆时,安全审计都有记录密钥的指纹,于是可以区分出某一个时间点的登陆是谁。因此,对于生产环境,建议不使用密码登陆,而用密钥做无密码登陆。

posted @ 2020-04-27 17:38  枫叶落一地  阅读(274)  评论(0编辑  收藏  举报