AWS Elastic Beanstalk Nginx环境部署Yii2 Advanced后端访问异常问题
你的配置存在3个核心问题:
root指令路径逻辑错误
Nginx的root指令不支持相对于上层root配置的相对路径,你写的../../backend/web是相对于Nginx启动时的工作目录(默认是/etc/nginx),无法映射到实际的项目代码路径,直接导致404错误。
另外即便你改成绝对路径root /var/www/html/backend/web也不对:root会把location匹配的路径后缀拼到目录后,你访问/backend/test.php时,Nginx会尝试读取/var/www/html/backend/web/backend/test.php,这个路径不存在,仍然会返回404。/backend前缀的路径适配必须用alias指令,而非root。缺失PHP请求处理规则
你当前的配置只指定了静态文件的根目录,没有匹配/backend下的PHP请求的规则,PHP文件不会被转发给php-fpm处理,直接返回文件内容或者触发502网关错误。手动修改EB平台Nginx配置不生效
AWS Elastic Beanstalk Linux平台的Nginx配置是系统自动生成的,手动通过vim修改的配置会在实例重启、版本重新部署后被覆盖,必须通过项目内的.platform/nginx/conf.d/目录存放自定义配置,随部署包一同发布才能永久生效。
可用的参考配置
# 前端默认路由规则 root /var/www/html/frontend/web; index index.php index.html index.htm; # 后端路由规则 location ^~ /backend { alias /var/www/html/backend/web; index index.php; # 处理后端PHP请求 location ~ ^/backend/(.*\.php)$ { try_files $uri =404; # 注意替换为你EB环境实际的php-fpm socket路径,常见为/run/php-fpm/www.sock或/var/run/php-fpm.sock fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } # Yii伪静态规则,适配URL美化 if (!-e $request_filename) { rewrite ^/backend/(.*)$ /backend/index.php?r=$1 last; } } # 原有前端PHP请求处理规则保留即可 location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
校验步骤
- 先确认EB实例中项目部署的实际根目录,部分环境默认路径为
/var/app/current,如果不对需要把配置里的/var/www/html替换为实际路径 - 修改配置后执行
nginx -t校验语法无误后,再执行nginx -s reload重载配置 - 要永久生效可将上述配置保存为项目根目录下的
.platform/nginx/conf.d/yii.conf,随代码一同部署到EB即可自动加载
内容的提问来源于stack exchange,提问作者MikelG
相关产品推荐
相关产品推荐

