Nginx配置2个带有url前缀的PHP应用程序

时间:2014-08-03 18:19:03

标签: php symfony nginx

我想在同一个域下提供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;
    }
}

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

所以我终于找到了解决方案:我的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;
}