Skip to content

nginx 代理

当 webman 需要直接提供外网访问时,建议在 webman 前增加一个 nginx 代理,这样有以下好处。

  • 静态资源由 nginx 处理,让 webman 专注业务逻辑处理
  • 让多个 webman 共用 80、443 端口,通过域名区分不同站点,实现单台服务器部署多个站点
  • 能够实现 php-fpm 与 webman 架构共存
  • nginx 代理 ssl 实现 https,更加简单高效
  • 能够严格过滤外网一些不合法请求

nginx 代理示例

upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
  server_name 站点域名;
  listen 80;
  access_log off;
  # 注意,这里一定是webman下的public目录,不能是webman根目录
  root /your/webman/public;

  location ^~ / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      if (!-f $request_filename){
          proxy_pass http://webman;
      }
  }

  # 拒绝访问所有以 .php 结尾的文件
  location ~ \.php$ {
      return 404;
  }

  # 允许访问 .well-known 目录
  location ~ ^/\.well-known/ {
    allow all;
  }

  # 拒绝访问所有以 . 开头的文件或目录
  location ~ /\. {
      return 404;
  }

}

一般来说以上配置开发者只需要将 server_name 和 root 配置成实际值即可,其它字段不需要配置。

注意 特别注意的是,root 选项一定要配置成 webman 下的 public 目录,千万不要直接设置成 webman 目录,否则你的所有文件可能会被外网下载访问,包括数据库配置等敏感文件。

基于 MIT 许可发布