Nginx - Как я могу запретить WordPress захватывать все места, чтобы я мог использовать некоторые для угловых x? - PullRequest
1 голос
/ 03 апреля 2019

Немного предыстории, я хочу, чтобы некоторые сайты работали через WordPress, а другие части - через Angular 7.

Таким образом, website.com перейдет на домашнюю страницу WordPress и website.com/signin перейдет на угловой сайт. Это возможно? Я играл с настройкой nginx, и это то, что я до сих пор. К сожалению, это заставляет все проходить через сайт WordPress, поэтому когда я нажимаю /signin, я получаю WordPress 404.

Маршрутизация является более сложной, чем этот, идеальным сценарием было бы создание белого списка определенных путей и маршрутизация их в угловые, а также маршрутизация чего-либо еще в wordpress (для этого относительно универсального 404). Например,

website.com/signin         --
website.com/users/:id        |
website.com/signout          |- all of these route to angular
website.com/otherModels/:id  |
website.com/another        --

website.com/everything-else-goes-to-wordpress

Я могу использовать WordPress или Angular, но они, похоже, используют конкурирующие индексные файлы. Мой angular использует index.html, а wordpress использует index.php (хотя, если я не ошибаюсь, угоняю все остальные вызовы в своем каталоге). Вот файлы nginx, которые я использую для wordpress:

server {
    root /var/www/website.com;
    index index index.html index.php index.htm index.nginx-debian.html;
    server_name website.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_buffers 8 16k; # increase the buffer size for PHP-FTP
        fastcgi_buffer_size 32k; # increase the buffer size for PHP-FTP
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }
}

И угловой:

server {
    root /path/to/angular-project/dist;
    index index index.html index.php index.htm index.nginx-debian.html;
    server_name website.com;

    location / {
        proxy_pass http://localhost:4200;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        try_files $uri $uri/ $uri$args /index.html;
    }
}

Очевидно, что я могу добавить местоположения в другие файлы, но когда я это сделаю, то, что настроено в location / {}, работает, а другое - нет. Например, если я изменю файл WordPress, чтобы он содержал:

location = /signin {
    root /path/to/angular-project/dist; // I've tried using alias as well
    proxy_pass http://localhost:4200;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    try_files $uri $uri/ $uri$args /index.html;
}

Ничего не происходит. Я все еще получаю свой WordPress 404 (вместо углового сайта). Я могу изменить приведенный выше фрагмент на location = /signin { return 404; } и получить nginx 404, поэтому я знаю, что расположение работает правильно. На самом деле я получаю ошибку nginx 404 до тех пор, пока не добавлю /index.html в конец строки try_files. Это заставляет меня поверить, что try_files /index.html почему-то не перенаправляется на (угоняется) WordPress. Это происходит и в обратном направлении. Между angular / wordpress, hichever установлен в location / {}, определяет 404 для местоположений, которые должны быть определены другим.

Есть ли способ предотвратить захват wordpress / angular всех "индексных" файлов?

1 Ответ

0 голосов
/ 12 апреля 2019

Я отвлекаюсь от комментариев Ричарда Смита . В основном то, что происходило (насколько я могу судить), это то, что Wordpress использовал все, что я определил в моем index, включая index.html (корень для угловых проектов). Чтобы избежать этого, я специально сказал nginx направлять запросы index.html на angular.

location = index.html {
    root /path/to/angular-project/dist; // I've tried using alias as well
    proxy_pass http://localhost:4200;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Это вынудило что-нибудь, направленное конкретно через index.html, попасть в мое угловое приложение. Как только я внес это изменение, я смог направить определенные ссылки на angular, оставив стандартную (иначе говоря) маршрутизацию в wordpress. Но были и другие ошибки, которые это вызвало. Все файлы js / css / etc все еще передавались через WordPress. Это то, что я сделал (хотя, возможно, есть более простой способ).

location ~* .(js|css|png|jpg|jpeg|svg|otf)$ {
    root /path/to/angular-project/dist;
    try_files $uri @wordpress_files;
}
location @wordpress_files {
    root /var/www/website.com;
    try_files $uri $uri/ $uri$args;
}

После этого мой сайт сначала попытается найти определенный файл в угловом формате. Если это не удалось, он загрузит версию WordPress. Это не работает, если файлы имеют одно и то же имя, но если это так, то они должны иметь одинаковую версию и, следовательно, должны быть безопасными для загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...