다른 도커 컨테이너에서 실행중인 apache
의 인스턴스에 대한 프록시 요청에 nginx
docker
컨테이너 (https://github.com/jwilder/nginx-proxy)를 사용 중입니다. 각 하위 도메인에는 자체 apache 고정 컨테이너가 있습니다. 이러한 서브 도메인 중 하나 (sub1)는 다음과 같은 특별한 규칙을 필요로합니다.nginx try_files 프록시가있는 경우 재 작성
URL이 "foo"로 시작되면 nginx가 파일이 있는지 확인하고 싶습니다. 파일이 존재하면 URL을 액세스 제어 스크립트 (imageControl.php)로 다시 작성하고 일반 Apache 컨테이너에 전달해야합니다. 파일이 존재하지 않으면 요청이 원격 서버로 프록시되기를 원합니다.
나는 올바르게 설정했지만 어떤 이유로 nginx는 원격 서버에 요청을 항상 보내고 있다고 생각합니다. 파일이 로컬에 존재하더라도. (nginx.conf부터 포함)
default.conf : 여기서
는 고정 표시기 용기 내에서의 nginx 설정 파일의 중요한 부분이다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;
}
내가 T로 nginx를 원하지 않는 점에 유의하시기 바랍니다 ry ImageControl.php (나는 php-fpm
를 사용하고 있지 않다)를 실행하기 위해 - nginx가 그것을 업스트림 아파치 컨테이너에 전달하기를 원한다.
원하는 동작 예 :
(이 부분은 작동)
- 요청이 http://sub1.mydomain.com/foo/bar.png
- /path/to/dockerized/webroot/foo/bar.png이되지 않습니다이다 존재하므로 요청은 원격 IP에 프록시됩니다.
(이 부분은 작동하지 않습니다) 요청이 /path/to/dockerized/webroot/foo/baz.png이 존재 http://sub1.mydomain.com/foo/baz.png
- , 그래서 요청에 다시 작성
- http://sub1.mydomain.com/imageControl.php?file=foo/baz.png
- 요청은 업스트림 아파치 용기
도움을 주셔서 감사합니다.