加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 带子位置的Nginx

发布时间:2020-12-13 15:57:16 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用nginx为两个项目设置一个开发服务器,一个在rails中,一个在 PHP中.我想要两个项目的基本URL(dev.example.com)和每个项目的子位置(dev.example.com/rails_proj和dev.example.com/php_proj).我的nginx conf如下: server { listen 80; server_nam
我正在尝试使用nginx为两个项目设置一个开发服务器,一个在rails中,一个在 PHP中.我想要两个项目的基本URL(dev.example.com)和每个项目的子位置(dev.example.com/rails_proj和dev.example.com/php_proj).我的nginx conf如下:

server {
    listen 80;
    server_name dev.example.com;

    passenger_enabled on;
    passenger_app_env development;
    passenger_buffer_response off;
    root /var/www/dev;

    location ~ ^/rails_proj {
            root /public;
            passenger_base_uri /rails_proj;
            passenger_app_root /var/www/dev/rails_proj;
            passenger_document_root /var/www/dev/rails_proj/public;
    }

    location ~ ^/php_proj {
            root /web;
            try_files $uri /app_dev.php$is_args$args;

            location ~ .php(/|$) {
                    fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_split_path_info ^(.+.php)(/.*)$;
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            }
    }
}

rails项目工作正常,但当我尝试访问dev.example.com/php_proj/app_dev.php并在日志中时,PHP项目给我一个“找不到文件”它说:在stderr中发送的FastCGI:“主脚本未知” .我发现了与它有关的问题,我尝试了很多方法,但我无法想出适用于这两个项目的东西.我怎样才能解决这个问题?

解决方法

我确定你现在已经开始或想出来了,但为了后人的缘故:你的位置块中的root指令会覆盖你的服务器根指令.这与它无关.您拥有conf的方式,项目文件需要位于Web服务器上的绝对路径/ web / php_proj中.

我无法确定本地路径的设置方式,但如果/ var / www / dev / rails_proj / public是包含应用程序根目录的目录,则可能需要执行以下操作:

location /rails_proj {
    alias /var/www/dev/rails_proj/public;
}

使用别名而不是root将从请求路径的开头剥离/ rails_proj,并提供相对于别名路径的文件.例如,如果您请求http://dev.example.com/rails_proj/php/test.php,它将提供文件/var/www/dev/rails_proj/public/php/test.php

另外,我肯定会建议您将顶级位置路径从正则表达式更改为标准前缀路径.
location~ ^ / php_proj实际上与location / php_proj完全相同,只是使用正则表达式混淆与nginx决定要服务的位置.正则表达式路径更加性能密集,基于第一匹配而不是最佳匹配,并且优先于所有前缀路径位置.

另外需要注意的是:使用$document_root $fastcgi_script_name可能并不总是按预期工作.特别是如果使用别名指令而不是root.在大多数情况下,最好使用变量$request_filename.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读