2017-01-01 6 views
9

PHP4-FPM을 실행하는 PHP 서버가 있으며 포트 번호 7000의 nginx를 통해 fastcgi와 함께 제공됩니다. 이 응용 프로그램은 도킹되어 실행중인 컨테이너로 실행 중입니다. my_api.nginx 역방향 프록시의 PHP 업스트림에서 XDebug를 어떻게 사용할 수 있습니까?

my_api 고정 표시기 용기 포트 80와의 my_api 애플리케이션 (및 기타)을 노출하는 업스트림 사용 리버스 프록시 Nginx의 역할을 다른 용기 통해서뿐만 아니라 직접 (의하면 정신에 대한) 포트 7000 통해 연결될 수있다 443 (80은 SSL로 리디렉션 됨)을 통해 해당 위치 아래의 proxy_pass 지시.

나는 파일이 http://localhost:7000에서 제공 포트에 9000 직접에 dbgp를 사용하여 XDebug가 세션을 시작하면 내가 디버깅 세션이 올바르게 확립 볼 수 있고 내가 디버깅 할 수 있습니다.

그러나 nginx 역방향 프록시가 제공하는 URL에 대해 XDebug 세션을 시작하려고하면 예 : https://localhost/my-api, 디버그 세션이 시작된 것처럼 보이지 않거나 최소한 IDE가 연결을 만들지 않습니다 (IDE에서 중단 점이 발생하지 않음).

nginx 리버스 프록시를 통해 만들어진 요청에 대해 어떻게 XDebug 세션을 설정할 수 있습니까?

고정 표시기-compose.yml :

version: "2" 

services: 
    api: 
    build: <path_to_dockerfile> 
    ports: 
     - 7000:7000 
     #- 9000:9000 # may be uncommented for direct debugging access 
    nginx_proxy: 
    build: <path_to_dockerfile> 
    links: 
     ... 
     - api:api 
    ports: 
     - 80:80 
     - 443:443 

xdebug.ini

이 질문의 목적을 위해

은 아래에있는 내 docker-compose.yml 구성 및 xdebug.ini의 (관련) 샘플입니다

zend_extension=xdebug.so 
xdebug.remote_enable=true 
xdebug.remote_connect_back=1 
xdebug.remote_port=9000 
xdebug.remote_handler=dbgp 
xdebug.remote_autostart=0 

NB : 나는이 두 가지 구성을 시도해 보았습니다. dbgpproxy을 실행중인 Docker 컨테이너를 시작하는 것을 포함하여이 작업을 시도했지만 리버스 프록시를 통과하는 요청을 디버깅 할 수있는 것은 아무것도없는 것처럼 보입니다. 이러한 시도를 위해 사용했던 구성이 잘못되어도 가능합니다.

나는 내 문제가 무엇인지에 대한 몇 가지 이론을 가지고 있는데, 그 중에는 remote_connect_back 구성 속성을 통해 XDebug에 전달되는 역방향 프록시의 IP 주소라는 의혹이 있습니다.

nginx 프록시를 통해 서버로 보낸 요청과 함께 작동하도록 XDebug를 올바르게 구성하는 방법에 대한 도움이나 통찰력을 업스트림 서버로 전달하면 크게 감사하겠습니다!

도움이 될만한 정보가 있으면 자세히 알려 드릴 수 있습니다.

+1

xdebug.remote_connect_back = '1'- '는'0 = 있도록 적절한 호스트를 사용/IP in'xdebug.remote_host' – LazyOne

+1

또한 - xdebug 로그를 활성화하고 그것이 무엇을 말해야하는지보십시오 - IP가 무엇인지 보여줍니다 : por 연결을 시도하고 거기서 무슨 일이 일어나고 있는지 (디버그 세션이 수락되면) 시도합니다. – LazyOne

답변

1

여기에 내가 dockerized PHP-FPM/nginx를 응용 프로그램에 연결하는 PHP 스톰을 가지고 방법은 다음과 같습니다

는 용기에 원격 호스트 IP를 주입한다.호스트에서 변수를 설정하십시오 :

XDEBUG_HOST=$(ipconfig getifaddr en0) 

나는 도커 작성에 익숙하지 않습니다. Kubernetes 매니페스트를 사용하고 있지만 환경 변수를 주입하는 방법이 있다고 확신합니다. xdebug.ini에서

:

xdebug.remote_host=${XDEBUG_HOST} 

이제 디버그 연결 xdebug.remote_port에 청취 할 Xdebug는 클라이언트를 설정 할 수 있어야한다. 또한 PHP Storm에서 또는 http://127.0.0.1:8080 (또는 nginx 컨테이너를 포트 포워딩하는 포트)으로 가리키는 IDE를 사용하여 디버그 서버를 설정해야합니다.

내 설정은 다음과 같습니다. PHP Storm을 사용하고 있지만 다른 xdebug 클라이언트에도이 스크립트를 적용 할 수 있습니다.

PHP Storm Xdebug server settings

PHP Storm preferences

xdebug.ini :

zend_extension=xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_port=10000 
xdebug.remote_autostart=1 
xdebug.idekey=www-data 
xdebug.remote_host=${XDEBUG_HOST} 

참조 : https://shippingdocker.com/xdebug/