アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【PythonApache
ファイアウォール内部のGradio/WebUIを外部からProxyPassを通して使う
POSTED BY
2025-03-17

セキュリティの観点から、外部から直接HTTPサーバのルートにアクセスさせず、1つディレクトリ名を介してアクセスさせることがままある。

マシン内部では

http://172.16.33.55:51115/

のようなGradioサーバが立ち上がっているとする。

マシン内部や社内ローカルからであれば上記URLに直接アクセスしてしまえばいいが、外部に一般公開したい場合、
https://aaa.myserver333.jp/my_gradio/

のように、my_gradioなどの名前を1つ置いてアクセスさせたい。
このような場合、まずリダイレクト設定として以下Apacheの基本設定をする。

<location>
    Require all granted
    ProxyPass 172.16.33.55:51115
    ProxyPassReverse 172.16.33.55:51115
    RequestHeader set X_FORWARDED_PROTO 'https'
</location>

これで
https://aaa.myserver333.jp/my_gradio/
へのアクセスは
http://172.16.33.55:51115/
へリダイレクトされるのだが、これだけではHTMLやCSS他付随ファイルパスがすべて/gradio.cssなどのままであり、404 Not Foundとなる。
これを解決するためには、API実行側でGradioオブジェクトをローンチするときに、以下のようにroot_path引数を与えてやればよい。

import gradio as gr

app = gr.Interface(...)
app.launch(server_port=51115, root_path="/my_gradio/")

こうすることにより、/gradio.cssが/my_gradio/gradio.cssと呼ばれるので、上記ApacheのProxyにかかってちゃんと
http://172.16.33.55:51115/gradio.css
が取得できる。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】