我在 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]