Nginx Proxy_set_header가 Apache GEOIP에서 작동하지 않습니다.

Nginx Proxy_set_header가 Apache GEOIP에서 작동하지 않습니다.

다음을 사용하여 Apache2에 Nginx 역방향 프록시를 사용하고 있습니다.지도 시간.

그런 다음 이것을 사용하여 Nginx에 geoip를 설치하려고합니다.지도 시간

역방향 프록시는 PHP에서 국가 코드를 얻을 수 있도록 geoip 데이터베이스를 설치하려고 시도하기 전까지는 한동안 완벽하게 작동했습니다.

튜토리얼에서 지시한 대로 nginx에 다음을 구성했습니다.

location ~ \.php$ {

    #       location / {
            #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            #include snippets/fastcgi-php.conf;

           proxy_pass http://1.2.3.4:8080$request_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code;
           proxy_set_header GEOIP_COUNTRY_CODE3 $geoip_country_code3;
           proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name;

           proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
           proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
           proxy_set_header GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
           proxy_set_header GEOIP_REGION $geoip_region;
           proxy_set_header GEOIP_CITY $geoip_city;
           proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code;
           proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
           proxy_set_header GEOIP_LATITUDE $geoip_latitude;
           proxy_set_header GEOIP_LONGITUDE $geoip_longitude;
    include /etc/nginx/proxy_params;
    }

apache2에 Proxy_pass를 사용하면 GEOIP 변수가 **phpinfo에 모두 표시되지 않습니다..

nginx fastcgi_pass를 직접 사용하면(아파치에 대한 역방향 프록시 끄기) 환경 변수를 설정할 수 있으며 해당 변수는 phpinfo에 반영됩니다.

Apache가 이를 읽지 않는 것 같기 때문에 Proxy_set_header가 작동하지 않는 것 같습니다.

아파치가 모든 변수를 얻을 수 있도록 하려면 어떻게 해야 합니까?

답변1

이 튜토리얼과 이 geoip nginx 튜토리얼의 코드를 복사하는 다른 여러 웹사이트가 잘못되었거나 오래된 것 같습니다.

프록시 헤더 설정시 밑줄(_)과 뮤즈(-)를 사용할 수 없는 것 같습니다. 그래서 에서 변경한 후

proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;

이에

proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;

Apache는 변수를 얻을 수 있으며 이제 내 phpinfo에도 표시됩니다.

따라서 PHP에 대한 내 전체 위치 블록은 이제 다음과 같습니다.

location ~ \.php$ {

           proxy_pass http://1.2.3.4:8080$request_uri;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header GEOIP-COUNTRY-CODE $geoip_country_code;
           proxy_set_header GEOIP-COUNTRY-CODE3 $geoip_country_code3;
           proxy_set_header GEOIP-COUNTRY-NAME $geoip_country_name;

           proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;
           proxy_set_header GEOIP-CITY-COUNTRY-CODE3 $geoip_city_country_code3;
           proxy_set_header GEOIP-CITY-COUNTRY-NAME $geoip_city_country_name;
           proxy_set_header GEOIP-REGION $geoip_region;
           proxy_set_header GEOIP-CITY $geoip_city;
           proxy_set_header GEOIP-POSTAL_CODE $geoip_postal_code;
           proxy_set_header GEOIP-CITY-CONTINENT-CODE $geoip_city_continent_code;
           proxy_set_header GEOIP-LATITUDE $geoip_latitude;
           proxy_set_header GEOIP-LONGITUDE $geoip_longitude;
    include /etc/nginx/proxy_params;
    }

위의 설정을 사용하면 값이 채워진 다음 서버 변수를 얻을 수 있습니다. 일부 서버는 보안상의 이유로 HTTP 접두사를 추가했습니다. 그리고 어떻게든... 대시가 다시 밑줄로 변환됩니다.

$_SERVER['HTTP_GEOIP_LONGITUDE'] 
$_SERVER['HTTP_GEOIP_LATITUDE'] 
$_SERVER['HTTP_GEOIP_CITY'] 
$_SERVER['HTTP_GEOIP_REGION'] 
$_SERVER['HTTP_GEOIP_CITY_COUNTRY_CODE'] 
$_SERVER['HTTP_GEOIP_COUNTRY_NAME'] 
$_SERVER['HTTP_GEOIP_COUNTRY_CODE3'] 
$_SERVER['HTTP_GEOIP_COUNTRY_CODE']

관련 정보