NGINX: основной блок местоположения переопределяет местоположение подкаталога?

Я прочитал небольшое количество документации по блокам местоположения, но у меня нет большого опыта работы с RegEx, поэтому я немного растерялся, как осуществить то, что я пытаюсь сделать. Следующая конфигурация nginx, вероятно, объяснит, что я хочу сделать лучше, чем могу это сказать:

server {
        server_name example.com www.example.com;
        root /var/www/;
        index index.php;


        location /blog/ {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                try_files $uri =404;
                include fastcgi_params;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }

        location / {
                try_files $uri @uwsgi;
        }

        location @uwsgi {
                include uwsgi_params;
                uwsgi_pass unix:/tmp/uwsgi.sock;
        }


}

example.com/ обслуживается приложением бутылки через uwsgi, поэтому все вещи в этом месте должны быть перенаправлены в приложение бутылки и обработаны там. Это работает нормально, как и ожидалось, однако я теряюсь, как добавить "исключение" в правило местоположения, чтобы example.com/blogи все под ним ../sub1/sub2 и т. д. не направлены на приложение бутылки, но на самом деле обрабатываются WordPress и его магией PHP.

Кажется, что это должно быть очень просто настроить, но очень сложно найти простые решения для таких проблем, потому что каждый, кажется, переполняет свои "учебные" конфигурации тоннами несущественных вещей, которые смущают новичка.

1 ответ

Решение

Это может потребовать некоторых настроек, но вам, вероятно, следует использовать вложенный блок местоположения:

server {
    server_name example.com www.example.com;
    root /var/www;
    index index.php;

    location /blog/ {
        try_files $uri $uri/ /blog/index.php?$args;

        location ~ \.php$ {
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
    }

    location / {
        try_files $uri @uwsgi;
    }

    location @uwsgi {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
    }
}

Обратите внимание, что URI по умолчанию изменен на /blog/index.php что, надеюсь, где все ваши файлы WordPress находятся.

Другие вопросы по тегам