【问题标题】:Nginx config for 2 PHP applications with url prefixes带有 url 前缀的 2 个 PHP 应用程序的 Nginx 配置
【发布时间】:2014-08-03 18:19:03
【问题描述】:

我想为同一域下的 2 个 PHP(Symfony) 应用程序提供服务,其中一个应用程序的 URL 前缀。 所以 www.mydomain.com/ 应该服务于第一个应用程序,而 www.mydomain.com/secondapp 应该服务于第二个应用程序。 我最终得到了这个不起作用的配置:

server {
    server_name mydomain.com www.mydomain.com;

    location / {
        root /var/www/first-app/web;
        try_files $uri /app.php$is_args$args;
    }

    location /secondapp {
        root /var/www/second-app/web;
        try_files $uri /app.php$is_args$args;
    }

    location ~ ^/(app|app_dev|config)\.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;
        fastcgi_param HTTPS off;
    }
}

当我将第一个应用程序的根指令放在最后一个位置下时,它适用于第一个应用程序,但无法提供第二个应用程序。 我应该创建第二个服务器指令并改用子域重写吗?

谢谢!

【问题讨论】:

  • 第二台服务器会发生什么?它显示错误吗? (php错误?或第一个应用程序的symfony错误?)或下载php文件?
  • 对于第二个应用程序,我从 symfony 收到 404 错误(它请求 /secondapp 而我希望它请求 /,我想我需要 URL 重写)。

标签: php symfony nginx


【解决方案1】:

您应该在您的位置使用别名而不是 root。如果使用root,则将位置匹配的路径添加到根路径中。

【讨论】:

    【解决方案2】:

    所以我终于找到了解决办法:我的 nginx conf:

    server {
        listen 80;
        server_name www.mydomain.com;
        root /var/www/first-app/web;
    
        location ~ ^/secondapp(/.*)$ {
            alias /var/www/second-app/web;
            try_files $1 @app;
        }
    
        location @app {
            expires off;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME /var/www/second-app/web/app.php;
            fastcgi_param SCRIPT_NAME     /secondapp/app.php;
            fastcgi_param REQUEST_URI     /secondapp$1;
        }
    
        location / {
            try_files $uri /app.php$is_args$args;
        }
    
        location ~ ^/(app|app_dev|config)\.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;
            fastcgi_param HTTPS off;
        }
    
        error_log /var/log/nginx/app_error.log;
        access_log /var/log/nginx/app_access.log;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      相关资源
      最近更新 更多