Назад | Перейти на главную страницу

настроить nginx с 2 местоположениями, в то время как 1 отвечает на конкретный запрос URL

Прошу прощения за странное название :)

что у меня есть

У меня два веб-приложения, работающих на одном сервере (установка OSClass и Vanilla Forum). Один из них должен быть мастер всего (OSClass) - почти каждый запрос должен обрабатываться этим приложением. Другое приложение должно отвечать только на некоторые конкретные запросы (Vanilla-Forum .. но позвольте назвать его раб).

masterPage (OSClass)
находится в каталоге / var / www / webroot / master
и слушает каждый запрос, например mypage.example.com/*
(но не URL-адрес подчиненной страницы)

slavePage (Ванильный форум)
находится в каталоге / var / www / webroot / slave /
и должен слушать только такие запросы, как mypage.example.com/slave/*

как работает мастер

главное приложение работает с такой конфигурацией:

#
# some general stuff...
#

http {
    # other stuff

    server {
        listen         80;
        server_name    mypage.example.com;
        root           /var/www/webroot/master
        index          index.php
        try_files      $uri $uri/ /index.php?$args;
        location ~ .php$ {
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param SCRIPT_FILENAME /var/www/webroot/master
            fastcgi_script_name;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index  index.php;
            include /etc/nginx/fastcgi_params;
        }

        # some more stuff
    }    
}

как я пытаюсь заставить раба работать

Я подумал, раз уж конфигурация работает для мастера, почему бы не продублировать «серверную» среду и не настроить ее на подчиненную. что-то вроде этого:

server {
    listen         80;
    server_name    mypage.example.com/slave;
    root           /var/www/webroot/slave
    index          index.php
    try_files      $uri $uri/ /index.php?$args;
    location ~ .php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME /var/www/webroot/slave
        fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index  index.php;
        include /etc/nginx/fastcgi_params;
    }         
    # some more stuff  
}

Но это не работает - URL-адрес mypage.example.com/slave по-прежнему приводит к мастер страница .. Я также пробовал два определения местоположения, но, видимо, я не могу определить местоположение для мастер, который работает для всех запросов, кроме тех, которые должны обрабатываться раб.. например

location /(!/slave)

извините, я действительно не очень разбираюсь в конфигурациях серверов, и до сих пор я не нашел ни одного учебника, который помог бы мне здесь. Кто-нибудь знает, как я мог настроить сервер? Или есть регулярное выражение Я мог бы исключить раб из мастер-расположение?

server_name - это доменное имя сервера, оно не может содержать никаких других частей URL.

Вы можете делать все, что хотите, со следующей настройкой:

#
# some general stuff...
#

http {
    # other stuff

    server {
        listen         80;
        server_name    mypage.example.com;
        root           /var/www/webroot/master
        index          index.php
        try_files      $uri $uri/ /index.php?$args;

        location /slave {
            alias /var/www/webroot/slave;
        }

        location ~ .php$ {
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index  index.php;
            include /etc/nginx/fastcgi_params;
        }

        # some more stuff
    }    
}

В fastcgi_param SCRIPT_FILENAME уже должен быть определен в общей конфигурации nginx (fastcgi_params), поэтому нет необходимости включать его здесь. На самом деле здесь было неправильно настроено.

В alias Директива устанавливает каталог, из которого обслуживаются файлы для этого местоположения URI.