当只有一个位置是路径特定的时候,如何配置Nginx为两个具有单独根指令的位置服务?

时间:2014-04-19 07:55:00

标签: php nginx fastcgi

我正在尝试以这样一种方式配置Nginx服务器块:它实现了两个目标:

  1. 拥有一个子域example.domain.com,用于提供index页面和来自/app1/app2等各种路径的网页;所有这些页面/路径共享/srv/www/example的共同根。

  2. 要让上一个目标中的子域从/app3之类的路径提供页面,但在这种情况下,根目录为/srv/www/example/app3/web

  3. 我能够实现第一和第二个目标,但从不同时。我使用的一些资源包括:

    以下是我当前的配置,目前只能正确地为index/app1/app2提供服务,因为将根指令移出location / {指示。

    server {
        listen 80;
        root /srv/www/example;
        index index.php index.html index.htm;
        server_name example.domain.com;
    
        location /app3/ {
            root /srv/www/example/app3/web;
            try_files @app3 @app3;
        }
        location ~ /app3/.+\.(jpg|jpeg|gif|css|png|svg|js|ico|)$ {
            root /srv/www/example;
        }
        location @app3 {
            include /etc/nginx/fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;                
            fastcgi_param SCRIPT_FILENAME /srv/www/example/app3/web/index.php;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT /srv/www/example/app3/web;
        }
    
        location / {
            try_files $uri $uri/ /index.php;
        }
    
        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    }
    

    为了在单个服务器块中实现这两个目标,我需要更改什么?如果有一些方法可以使用多个服务器块来访问同一个子域并侦听同样的端口,那么这也是可以接受的。

0 个答案:

没有答案