我有一个在Nginx上运行的应用程序,其工作服务器块如下:
server {
listen 80;
server_name example.com;
root /home/deployer/apps/my_app/current/;
index index.php;
location / {
index index.php;
try_files $uri $uri/;
}
location ~ \.php${
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/home/deployer/apps/shared/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location /foo {
root /home/deployer/apps/modules/;
# tried this:
# alias /home/deployer/apps/modules/foo/;
# but php is not working with alias, only with root
}
}
当我访问/ foo时,Nginx在路径/ home / deployer / apps / modules / foo /中查找index.php文件并且它可以工作.
问题:
我使用capistrano设置了一个部署脚本,该脚本部署到foo目录:
/home/deployer/apps/modules/foo/
Capistrano在’foo’目录中创建一个’当前’目录,以包含从Github引入的应用程序文件,因此我需要将根路径更改为:
/home/deployer/apps/modules/foo/current/
但是Nginx将location指令附加到根指令的末尾….所以,当你访问/ foo时,Nginx试图查看:
/home/deployer/apps/modules/foo/current/foo/
使用别名应该忽略location指令中设置的/ foo并从确切的别名路径(日志确认正在发生)中提供文件,但是当我使用alias指令时,php配置没有正确应用而且我是得到404返回.
如果我回到root指令并完全删除’current’目录,它可以正常工作.我需要从’current’目录提供的文件才能顺利地与Capistrano部署一起工作,但是无法弄清楚如何使alias指令与php一起工作.
任何人有任何想法或建议,我错过了什么?
解决方法:
感谢@ xavier-lucas关于无法将try_files与别名一起使用的建议.
要在php中使用别名,我必须从原始问题中显示的php位置块中删除try_files指令:
try_files $uri =404;
我实际上不得不在/ foo位置重新设置php位置块并删除上面的行.最终看起来像这样:
location /foo {
alias /home/deployer/apps/modules/foo/;
location ~ \.php${
# try_files $uri =404; -- removed this line
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/home/deployer/apps/shared/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
这允许直接从alias指令中列出的目录处理php文件.
标签:nginx,php,server 来源: https://codeday.me/bug/20190609/1206749.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。