0

大規模な検索を行ったところ、nginx proxy_pass の質問に関する投稿がかなりあります。私は自分の問題をこれらの質問のいくつかに変更しようとしましたが、進歩はありませんでした。

PHPベースのWebサイトをRailsに書き直しています。元のサイト自体は、フォーム付きのシンプルな 2 ページです。Apache の mod_rewrite / mod_proxy ソリューションを使用して、フォームの投稿後にサイトが続く場所の 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の最後であると確信していますか?

代わりにパッセンジャーとnginxを使用してrails cmsに変換されたphpサイトのこのソリューションを書き直そうとしています。

Railsアプリはページが見つからない404を返すだけなので、これまでの解決策は機能していません。そのため、proxy_passが投稿リクエストを他のサーバーに転送していないことがわかります。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 でうまく動作しません。どんな洞察も素晴らしいでしょう。

4

1 に答える 1

1
proxy_pass http://www.domaintoacceptdatapostandbemasked.com/;

このルールは、「/」の場所へのプロキシ要求になります(proxy_pass uriの先頭のスラッシュ)(a /、b /、およびc /は失われます)。

スラッシュを先頭にせずにURIを使用するだけで、完璧に機能するはずです

proxy_pass http://www.domaintoacceptdatapostandbemasked.com;

uriを変更する必要がある場合は、proxy_passの前にrewriteを使用できます。例えば:

location /a/ {
    rewrite /(a/.*)$ /actual_letter_directory/$1 break; # as from you .htaccess example
}
于 2012-07-29T05:39:21.657 に答える