다음을 사용하여 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']