Проблемы перезаписи nginx / proxy_pass

Я провел обширный поиск, и на nginx proxy_pass есть несколько постов. Я попытался изменить мою проблему на некоторые из этих вопросов без какого-либо прогресса, поэтому здесь идет.

Я нахожусь в процессе переписывания php-сайта на Rails. Сам оригинальный сайт прост 2 страницы с формами. Он использует решение mod_rewrite / mod_proxy в Apache для маскировки URL, по которому сайт продолжается после публикации формы.

Сайт php имеет 3 каталога, в которых нет ничего, кроме 3 файлов.htaccess, для простоты, давайте вызовем каталоги a, b, c. каждый файл.htaccess со следующим

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ http://www.domainbeingpostedto.com/actual_letter_directory/$1 [P,L]
</IfModule>

Я не эксперт по Apache, но я уверен, что [P,L] такой же, как proxy_pass и последний в nginx?

Я пытаюсь переписать это решение для php-сайта, который был преобразован в rails cms, используя вместо этого passenger и nginx.

Решение, которое у меня есть, пока не работает, потому что приложение rails просто возвращает 404 с не найденной страницей, поэтому я знаю, что proxy_pass не перенаправляет запрос post на другой сервер. Что у меня есть для моего файла nginx.conf:

server {
    listen 80;
    server_name newtestappdomain.com;

    location /a/ {
        proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;
        #rewrite ^/a/(.*)$ http://www.domaintoacceptdatapostandbemaskedcom/a/ last;
    }

    location /b/ {
        proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;
        #rewrite ^/b/(.*)$ http://www.domaintoacceptdatapostandbemasked.com/b/ last;
    }

    location /c/ {
        proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;
        #rewrite ^/c/(.*)$ http://www.domaintoacceptdatapostandbemasked.com/c/ last;

    }

    root /home/deploy/testapp/public;   # <--- be sure to point to 'public'!
    passenger_enabled on;

}

Если я раскомментирую правило перезаписи, оно просто переходит на другой сайт, который я пытаюсь замаскировать. Я сделал трассировку заголовка, чтобы проверить также. Ничего не видел пост на другой домен. Я немного озадачен, поскольку я действительно новичок в nginx и не уверен, что делать. Apache плохо работает с rails и mod_rewrite / mod_proxy. Любое понимание было бы здорово.

1 ответ

Решение
proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;

Это правило было бы прокси-запросом к месту "/" (косая черта в proxy_pass uri) (a/, b/ и c / будут потеряны).

Просто используйте Uri без косой черты, и он должен работать идеально

proxy_pass http://www.domaintoacceptdatapostandbemasked.com;

Если вам нужно изменить uri, вы можете использовать rewrite перед proxy_pass. например:

location /a/ {
    rewrite /(a/.*)$ /actual_letter_directory/$1 break; # as from you .htaccess example
}
Другие вопросы по тегам