如何配置Nginx使CodeIgniter 4通过Drupal域名子路径正常服务
解决CodeIgniter 4在Elastic Beanstalk Nginx环境下的PATH前缀转发问题
针对CloudFront转发https://DRUPAL.com/PATH请求到CodeIgniter应用后,路由和静态资源无法正常工作的问题,通过自定义Nginx配置去掉PATH前缀,让应用像访问原域名一样处理请求。
步骤1:创建Elastic Beanstalk自定义Nginx配置
在CodeIgniter项目根目录下新建.ebextensions文件夹,添加配置文件01-nginx-rewrite.conf,内容根据你的EB PHP环境选择对应版本:
版本1:适用于反向代理转发后端服务的场景
files: "/etc/nginx/conf.d/ci-path-rewrite.conf": mode: "000644" owner: root group: root content: | # 匹配所有/PATH开头的请求,优先处理静态文件 location ^~ /PATH/ { try_files $uri $uri/ @ci-rewrite; } # 重写规则:去掉/PATH前缀后转发给CodeIgniter location @ci-rewrite { rewrite ^/PATH/(.*)$ /$1 break; proxy_pass http://127.0.0.1:8080; # 替换为你的CodeIgniter监听端口,EB默认PHP环境通常为8080 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 直接处理public目录下的静态资源,设置缓存 location ~* ^/PATH/public/(css|js|images|fonts)/ { rewrite ^/PATH/(public/.*)$ /$1 break; root /var/app/current; # EB默认项目根目录,若有修改请调整 expires 1y; add_header Cache-Control "public, immutable"; }
版本2:适用于PHP-FPM直接处理的场景(EB PHP标准环境)
files: "/etc/nginx/conf.d/ci-path-rewrite.conf": mode: "000644" owner: root group: root content: | # 匹配/PATH开头的请求,引导到index.php location ^~ /PATH/ { try_files $uri $uri/ /PATH/index.php$is_args$args; } # 处理PHP请求,去掉/PATH前缀后传递给PHP-FPM location ~ ^/PATH/index.php { rewrite ^/PATH/(index.php.*)$ /$1 break; fastcgi_pass unix:/var/run/php-fpm/www.sock; # 确认EB的PHP-FPM sock路径,不同版本可能不同 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 传递正确的URI给CodeIgniter路由 fastcgi_param REQUEST_URI $uri; fastcgi_param PATH_INFO $uri; } # 直接返回public目录静态资源 location ~* ^/PATH/public/(css|js|images|fonts)/ { rewrite ^/PATH/(public/.*)$ /$1 break; root /var/app/current; expires 1y; add_header Cache-Control "public, immutable"; }
注意:若不确定PHP-FPM的sock路径,可登录EB实例执行
ls /var/run/php-fpm/查看,常见路径还有/var/run/php-fpm/php-fpm.sock。
步骤2:调整CodeIgniter配置
修改app/Config/App.php中的关键配置:
public $baseURL = 'https://DRUPAL.com/PATH/'; public $indexPage = ''; public $uriProtocol = 'REQUEST_URI';
步骤3:部署测试
将包含.ebextensions文件夹的项目重新打包,上传到Elastic Beanstalk部署。测试以下场景:
- 访问
https://DRUPAL.com/PATH/确认首页正常加载 - 访问子路由如
https://DRUPAL.com/PATH/controller/method确认路由生效 - 检查静态资源如
https://DRUPAL.com/PATH/public/css/style.css是否能正确加载
内容的提问来源于stack exchange,提问作者Purdy
相关产品推荐
相关产品推荐

