我使用的是nginx
docker
容器(https://github.com/jwilder/nginx-proxy)代理請求到其他搬運工容器中運行的apache
實例存在代理。每個子域都有自己的apache docker容器。其中一個子域(sub1)需要一些特殊規則:nginx的try_files改寫如果要是不
如果URL以「foo」開頭,那麼我希望nginx檢查文件是否存在。如果該文件存在,那麼它應該在URL重寫訪問控制腳本(imageControl.php),並把它傳遞到通常阿帕奇容器。如果該文件不存在,我想請求被代理到遠程服務器。
我認爲我正確設置好了,但由於某種原因nginx的總是將請求發送到遠程服務器 - 即使該文件存在本地。
這裏是nginx的配置文件從搬運工容器內的相關部分:
default.conf(包括來自nginx.conf):
upstream sub1.mydomain.com {
## Can be connect with "dockerized_default" network
# dockerized_sub1
server 172.18.0.2:80;
}
server {
server_name sub1.mydomain.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
include /etc/nginx/vhost.d/sub1.mydomain.com;
location/{
proxy_pass http://sub1.mydomain.com;
}
}
的/ etc/nginx的/ vhost.d/sub1.mydomain.com:
location ^~ /foo/ {
root /path/to/dockerized/webroot;
try_files $uri @rewrite @remoteproxy;
}
location @remoteproxy {
include vhost.d/remoteproxy.inc;
proxy_pass http://remote.ip.address.here;
}
location @rewrite {
rewrite ^/(.*)$ /imageControl.php?file=$1 break;
}
請注意,我不想nginx的到t RY運行imageControl.php(我不使用php-fpm
) - 我想nginx的將它傳遞給上游apache的容器。
期望的行爲例如:
(這部分的工作原理)
- 請求是http://sub1.mydomain.com/foo/bar.png
- /path/to/dockerized/webroot/foo/bar.png不存在,所以請求被代理到遠程ip。
(這部分不工作)
- 請求是http://sub1.mydomain.com/foo/baz.png
- /path/to/dockerized/webroot/foo/baz.png存在,所以該請求被改寫爲http://sub1.mydomain.com/imageControl.php?file=foo/baz.png
- 的請求被髮送到所述上游apache的容器
我會很感激一些幫助。