Обычной задачей при настройке связки Nginx + Apache, являетя обеспечение правильного значения переменной REMOTE_ADDR (в ней должен содержаться реальный IP клиента, а не локальный IP сервера).
Эта проблема решается установкой модулей rpaf или remoteip и небольшими правками конфигурационных фалов Nginx, а в случае использования панели управления веб хостингом Vesta CP — ее шаблонов.
Сначала, в панели управления Vesta CP в разделе управления доменами отключается поддержка Proxy NGINX, чтобы старые настройки корректно удалились из /home/user/conf/web/nginx.conf.
Затем, в шаблоны Vesta CP отвечающие за настройку Nginx, в секцию location, добавляется установка следующих заголовков:
| 1
2
3
 | 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 Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Редактируем шаблоны Proxy default
| vi /usr/local/vesta/data/templates/web/nginx/default.tpl | 
vi /usr/local/vesta/data/templates/web/nginx/default.tpl
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 | server {
    listen      %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;
 
    location / {
        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_pass      http://%ip%:%web_port%;
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %docroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
 
    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }
 
    location @fallback {
        proxy_pass      http://%ip%:%web_port%;
    }
 
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
 
    include %home%/%user%/conf/web/nginx.%domain%.conf*;
} | 
server {
    listen      %ip%:%proxy_port%;
    server_name %domain_idn% %alias_idn%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;
    location / {
        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_pass      http://%ip%:%web_port%;
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %docroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }
    location @fallback {
        proxy_pass      http://%ip%:%web_port%;
    }
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
    include %home%/%user%/conf/web/nginx.%domain%.conf*;
}
| vi /usr/local/vesta/data/templates/web/nginx/default.stpl | 
vi /usr/local/vesta/data/templates/web/nginx/default.stpl
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 | server {
    listen      %ip%:%proxy_ssl_port%;
    server_name %domain_idn% %alias_idn%;
    ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;
 
    location / {
        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_pass      https://%ip%:%web_ssl_port%;
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %sdocroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
 
    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }
 
    location @fallback {
        proxy_pass      https://%ip%:%web_ssl_port%;
    }
 
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
 
    include %home%/%user%/conf/web/snginx.%domain%.conf*;
} | 
server {
    listen      %ip%:%proxy_ssl_port%;
    server_name %domain_idn% %alias_idn%;
    ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;
    error_log  /var/log/%web_system%/domains/%domain%.error.log error;
    location / {
        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_pass      https://%ip%:%web_ssl_port%;
        location ~* ^.+\.(%proxy_extentions%)$ {
            root           %sdocroot%;
            access_log     /var/log/%web_system%/domains/%domain%.log combined;
            access_log     /var/log/%web_system%/domains/%domain%.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }
    location @fallback {
        proxy_pass      https://%ip%:%web_ssl_port%;
    }
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
    include %home%/%user%/conf/web/snginx.%domain%.conf*;
}
Включаем поддержку Proxy NGINX в панели управления, и в /home/user/conf/web/nginx.conf будут записаны настройки согласно измененным шаблонам.
Включаем модуль rpaf
и вносим изменения в его настройки
| vi /etc/apache2/mods-enabled/rpaf.conf | 
vi /etc/apache2/mods-enabled/rpaf.conf
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 | <IfModule rpaf_module>
    RPAFenable On
 
    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On
 
    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 127.0.0.1 ::1 IP_адрес_сервера 
    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
    # RPAFheader X-Real-IP
</IfModule> | 
<IfModule rpaf_module>
    RPAFenable On
    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On
    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 127.0.0.1 ::1 IP_адрес_сервера
    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
    # RPAFheader X-Real-IP
</IfModule>
Или включаем модуль remoteip
и создаем файл с его настройками
| vi /etc/apache2/mods-enabled/remoteip.conf | 
vi /etc/apache2/mods-enabled/remoteip.conf
| 1
2
3
4
5
 | <IfModule mod_remoteip.c>
   #  RemoteIPHeader X-Forwarded-For
      RemoteIPHeader X-Real-IP
      RemoteIPInternalProxy IP_адрес_сервера</IfModule> | 
<IfModule mod_remoteip.c>
   #  RemoteIPHeader X-Forwarded-For
      RemoteIPHeader X-Real-IP
      RemoteIPInternalProxy IP_адрес_сервера
</IfModule>
После включения модуля и изменения конфига нужно перезапустить Apache:
Если придется вручную исправлять файлы настроек nginx для конкретных доменов, то для вступления настроек в силу нужно перезапустить Nginx:
		
		 
Добавить комментарий