使用 mod_proxy 在 apache 中模拟 nginx 代理配置,如何使用?

使用 mod_proxy 在 apache 中模拟 nginx 代理配置,如何使用?

我在 nginx 中有一个工作配置,如下所示

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_redirect default;

        proxy_set_header    Host        $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size       100m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      600;
        proxy_send_timeout         600;
        proxy_read_timeout         600;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }

    location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|htm|html)$ {
        root PATH_TO_STATIC_CONTENT;
    }

}

我如何使用 apache 模拟这一点?我尝试了以下配置,但静态内容不起作用。

<VirtualHost *:80>
ServerName example.com
DocumentRoot PATH_TO_STATIC CONTENT
<Location />
  ProxyPass http://127.0.0.1:8000
</Location>
<LocationMatch SAME_REGEXP_AS_NGINX>
    ProxyPass !
</LocationMatch>
</VirtualHost>

我怎样才能像 nginx 一样提供静态内容?或者说有可能吗?提前致谢

答案1

指令的顺序ProxyPass很重要,与 nginx 不同,所有匹配的位置块都会被应用,从最不具体到最具体。

换句话说,您需要稍微改变一下方法才能使其发挥作用。

可能更直接、更易读的方法是使用 mod_rewrite:

RewriteRule \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|htm|html)$ - [L]
RewriteRule ^/(.*)$ http://127.0.0.1:8000/$1 [P,L]

相关内容