ProxyPass で使用すると Apache エイリアスは無視されます

ProxyPass で使用すると Apache エイリアスは無視されます

インストールしようとしていますヨッター私のサーバーでは、nginxの代わりにapacheを使いたいと思っています。インストールガイドnginx 構成ファイルのみがリストされており、これを「翻訳」しようとしています。

設定は3つの異なるプロキシルートで、最初のルートはDockerコンテナにつながり、2番目のルートは(/静的/) をスタイルシートなどがあるディレクトリに、最後の 1 つを Unix ドメイン ソケットにそれぞれ配置します。

私の場合、最初のルートは機能しているように見えます (サイトにアクセスできます) が、静的リソースへの各リクエストは 404 を返します。各リクエストは docker ProxyPass ディレクティブを使用しているようです (順序は関係ありません。最後に配置した場合 (以下を参照)、それが唯一使用されるものになります)。

これは作成されたログ ファイル (の一部) です。

yotter.domain.tld - - [12/Aug/2021:21:14:21 +0200] "GET /static/favicons/favicon.ico HTTP/1.1" 404 1935 file=proxy:http://127.0.0.1:5000/static/favicons/favicon.ico
yotter.domain.tld - - [12/Aug/2021:21:15:54 +0200] "GET /index HTTP/1.1" 200 1126 file=proxy:http://127.0.0.1:5000/index
yotter.domain.tld - - [12/Aug/2021:21:15:54 +0200] "GET /static/semantic/semantic.min.css HTTP/1.1" 404 1935 file=proxy:http://127.0.0.1:5000/static/semantic/semantic.min.css

その理由は何でしょうか?

これは nginx の設定です:

server {
    listen 80;
    server_name <example.com>; # ChangeME
    access_log off;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }

    location /static/ {
        root /home/ubuntu/Yotter/app/; # Change this depending on where you clone Yotter
        sendfile on;
        aio threads=default;
    }

    location ~ (^/videoplayback$|/videoplayback/|/vi/|/a/) {
        proxy_pass http://unix:/var/run/ytproxy/http-proxy.sock;
        add_header Access-Control-Allow-Origin *;
        sendfile on;
        tcp_nopush on;
        aio_write on;
        aio threads=default;
        directio 512;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

これまでのところ、次のものがあります:

<VirtualHost *:443>
        ServerName yotter.domain.tld

        LogFormat "%v %l %u %t \"%r\" %>s %b file=%f" commonvhost
        CustomLog ${APACHE_LOG_DIR}/yotter_access.log commonvhost

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/domain.tld/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem

        <Location "/">
                ProxyPass http://127.0.0.1:5000/
                ProxyPassReverse http://127.0.0.1:5000/
        </Location>


        <Location "/static">
                Alias "/var/www/Yotter/app/static"
        </Location>

        <Directory "/var/www/Yotter/app/">
                Require all granted
        </Directory>


        <LocationMatch (^/videoplayback$|/videoplayback/|/vi/|/a/)>
                ProxyPass unix:///var/run/ytproxy/http-proxy.sock
                ProxyPassReverse unix:///var/run/ytproxy/http-proxy.sock
                Header add Acces-Control-Allow-Origin: *
        </LocationMatch>

</VirtualHost>

または

<VirtualHost *:443>
        ServerName yotter.domain.tld

        LogFormat "%v %l %u %t \"%r\" %>s %b file=%f" commonvhost
        CustomLog ${APACHE_LOG_DIR}/yotter_access.log commonvhost

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/domain.tld/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem


        Alias "/static" "/var/www/Yotter/app/static"

        <Directory "/var/www/Yotter/app/">
                Require all granted
        </Directory>


        <LocationMatch (^/videoplayback$|/videoplayback/|/vi/|/a/)>
                ProxyPass unix:///var/run/ytproxy/http-proxy.sock
                ProxyPassReverse unix:///var/run/ytproxy/http-proxy.sock
                Header add Acces-Control-Allow-Origin: *
        </LocationMatch>


        ProxyPass / http://127.0.0.1:5000/
        ProxyPassReverse / http://127.0.0.1:5000/

</VirtualHost>

答え1

プロキシから静的データを除外するには、次の操作を行う必要があります!

ProxyPass "/static" "!"

これは、構成内のプロキシ コマンドの前に表示される必要があります。

または:

<Location "/static">
    ProxyPass "!"
</Location>

参照ProxyPass 公式ドキュメント

関連情報