Проблемы перезаписи 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
}