2017-04-07 8 views
0

다른 도커 컨테이너에서 실행중인 apache의 인스턴스에 대한 프록시 요청에 nginxdocker 컨테이너 (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가 그것을 업스트림 아파치 컨테이너에 전달하기를 원한다.

원하는 동작 예 :

  1. (이 부분은 작동)

  2. (이 부분은 작동하지 않습니다) 요청이 /path/to/dockerized/webroot/foo/baz.png이 존재 http://sub1.mydomain.com/foo/baz.png

  3. , 그래서 요청에 다시 작성

로 보내진다

도움을 주셔서 감사합니다.

답변

0

당신은 if -e 표현을 사용하여 더 많은 행운을 가질 수있다 :

location ^~ /foo/ { 
    root /path/to/dockerized/webroot; 
    if (-e $request_filename) { 
     rewrite ^/(.*)$ /imageControl.php?file=$1 last; 
    } 
    include vhost.d/remoteproxy.inc; 
    proxy_pass http://remote.ip.address.here; 
} 

이 이상 this document를 참조하십시오.