在一个域名下服务两个位置

在一个域名下服务两个位置

我有两个应用程序想要在 nginx 中的一个域下同时提供服务。

文件夹结构

/var/www/phm
    /client
        /static
            /css
              main.css
          index.html
    /server
        /public
           /img
               intro.png

nginx.conf

    server_name phm.example.com;
    
    root /var/www/phm;
    index index.html index.php;
    
    location / {
        try_files $uri /client/$uri @server;
    }
    
    location @server {
        try_files /server/public/$uri /server/public/index.php$is_args$args =404;
    }
    
    location ~ \.php {
        fastcgi_split_path_info ^/(.+\.php)(.*)$;
        include fastcgi.conf;
        internal;
    }

我的期望是,以下请求将得到相应文件的答复

  • phm.example.com ---> /var/www/phm/client/index.html
  • phm.example.com/static/css/main.css ---> /var/www/phm/client/static/css/main.css
  • phm.example.com/img/intro.png ---> /var/www/phm/server/public/img/intro.png

答案1

我会尝试这样的配置:

server_name phm.example.com;

root /var/www/phm/client;
index index.html index.php;

location / {
    try_files $uri =404;
}

location /img {
    root /var/www/phm/server/public;

    try_files $uri /index.php$is_args$args;
}

location ~ \.php {
    fastcgi_split_path_info ^/(.+\.php)(.*)$;
    include fastcgi.conf;
}

在此配置中,默认从/var/www/phm/client目录提供文件。对于location /img,根目录更改为/var/www/phm/server/public

此配置将用于http://phm.example.com/img/intro.png/var/www/phm/server/public/img/intro.png

相关内容