乐趣区

常用nginx-web配置

常用 nginx 对于 web 项目配置整理,做个笔记。

php web 项目配置:

server {
  listen 80;
  listen [::]:80;

  # 设置上传最大为 5MB
  client_max_body_size 5m;

  root /srv/www/wechat/public;

  index index.html index.php;

  server_name example.com;

  location / {try_files $uri $uri/ =404;}

  # 支持 php
  location ~ \.php$ {
    # Check that the PHP script exists before passing it
    try_files $fastcgi_script_name =404;

    fastcgi_index index.php;
    include fastcgi.conf;

    # With php-fpm (or other unix sockets):
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    #  # With php-cgi (or other tcp sockets):
    #  fastcgi_pass 127.0.0.1:9000;
  }

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  #
  location ~ /\.ht {deny all;}
}

php web 项目配置 支持 laravel、symfony、Yii2 单入口:

...
  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    #try_files $uri $uri/ =404;  # 注释上面这句,使用下面这句
    try_files $uri $uri/ /index.php?$query_string;
  }
...

php web 项目配置 支持 ThinkPHP

...
  location ~ \.php$ {
    # regex to split $uri to $fastcgi_script_name and $fastcgi_path
    fastcgi_split_path_info ^(.+\.php)(/.+)$;

    # Check that the PHP script exists before passing it
    try_files $fastcgi_script_name =404;

    # Bypass the fact that try_files resets $fastcgi_path_info
    # see: http://trac.nginx.org/nginx/ticket/321
    set $path_info $fastcgi_path_info;
    fastcgi_param PATH_INFO $path_info;   # ThinkPHP 依赖 PATH_INFO 这个环境变量

    fastcgi_index index.php;
    include fastcgi.conf;

    # With php-fpm (or other unix sockets):
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    #  # With php-cgi (or other tcp sockets):
    #  fastcgi_pass 127.0.0.1:9000;
  }
...

php web 项目配置 禁止访问上传目录下的 php 文件:

...
  # 这个块 location 要放在 location ~ \.php$ 之前
  location ~ ^/uploads/.*\.php$ {     # 所有 /uploads 文件目录下的.php 文件都被禁止访问
    #deny all;  # 返回 403
    return 404; #返回 404
  }
...

原文连接:
常用 nginx web 配置

退出移动版