zoukankan      html  css  js  c++  java
  • 应用布署基础检查点(后端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时,多个人使用时是无法区分出谁是谁的。但是使用密钥做无密码登陆时,安全审计都有记录密钥的指纹,于是可以区分出某一个时间点的登陆是谁。因此,对于生产环境,建议不使用密码登陆,而用密钥做无密码登陆。

  • 相关阅读:
    【百度地图API】如何获取行政区域的边界?(转载)
    Javascript原型,原型链?有什么特点?
    什么是闭包?为什么使用闭包?闭包的缺点?
    为什么利用多个域名来存储网站资源会更有效?
    javascript如何处理很多数据,类似分页切换
    关于模板引擎handlebars.js基本用法
    关于CSS3的filter(滤镜) 属性
    App里面如何正确显示用户头像
    jQuery性能优化的一些参考建议
    文字超出显示省略号
  • 原文地址:https://www.cnblogs.com/pheye/p/12788312.html
Copyright © 2011-2022 走看看