web-dev-qa-db-ja.com

/から/index.htmlへのプロキシパスの方法

私は現在、URLパスを使用するJSプロジェクトに取り組んでいます。今、私が自分のWebサイトにexample.com /でアクセスすると、JavaScriptは機能しません。 example.com/index.html

私はすでにリバースプロキシを使用して、2つの異なるDockerコンテナへのパスをプロキシしています。だから私の考えはexample.com/index.html when example.com/が呼び出されます。しかし、私はこの目標を達成するための正規表現を理解することはできません。

私の古い設定:

server {
listen       80;
server_name  example.com;

# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;

# optimize downloading files larger than 1G - refer to nginx doc 
before adjusting
#proxy_max_temp_file_size 2G;

location / {
    proxy_pass http://structure.example:80;
}

location /cdn {
    proxy_pass http://content.example:80;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

}

私が試したもの:

    server {
listen       80;
server_name  example.com;

# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;

# optimize downloading files larger than 1G - refer to nginx doc 
before adjusting
#proxy_max_temp_file_size 2G;

location / {
    proxy_pass http://structure.nocms:80/index.html;
}

location ~* \S+ {
    proxy_pass http://structure.nocms:80;
}

location /cdn {
    proxy_pass http://content.nocms:80;
}



error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

}
5
Alexander Pilz

以下の設定はあなたのために働くはずです

server {
listen       80;
server_name  example.com;

# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;

# optimize downloading files larger than 1G - refer to nginx doc 
before adjusting
#proxy_max_temp_file_size 2G;

location = / {
    rewrite ^ /index.html permanent;
}

location / {
    proxy_pass http://structure.example:80;
}

location /cdn {
    proxy_pass http://content.example:80;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

}
7
Tarun Lalwani

受け入れられた回答には1つの欠点があります。example.comに移動すると明示的にexample.com/index.htmlにリダイレクトされます(つまり、301 Moved permanentlyが返されます)。常に望ましいとは限りません。

代わりに、location /の前に別のディレクティブlocation = /を付けることをお勧めします。これは、ルートURLのみに設計されています。

location = / {
    proxy_pass http://structure.nocms:80/index.html;
}

location / {
    proxy_pass http://structure.nocms:80;
}

上記はnginxにリクエストをexample.comに直接http://structure.nocms:80/index.htmlに渡すように指示しますが、example.com/*の他のURLをリクエストするとリクエストはダウンストリームの対応するURL。

6
Vlad Nikiforov