Проксирование обращений к BGBillingServer посредством nginx

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: При классической схеме сервер биллинга располагается во внутренней сети организации, '''nginx''' позволя...)
Строка 79: Строка 79:
         }     
         }     
     }
     }
 +
</pre>
 +
 +
== Второй пример пример ==
 +
Сервер биллинга расположен на внутреннем сервере 1.2.3.4.
 +
Клиент заходит на страницу https://bill.provider.ru либо https://gw.provider.ru и его запросы пробрасываются на http порт внутреннего сервера.
 +
 +
Обратите внимание на закрытые сервисы '''executer''', '''mpsexecuter'''. Их можно открыть для доверенных адресов (сотрудников с правом входа извне, серверов платежных систем).
 +
 +
<pre>
 +
user  nginx;
 +
worker_processes  1;
 +
 +
#error_log  logs/error.log;
 +
#error_log  logs/error.log  notice;
 +
#error_log  logs/error.log  info;
 +
 +
#pid        logs/nginx.pid;
 +
 +
 +
events {
 +
    worker_connections  1024;
 +
}
 +
 +
 +
http {
 +
    include      mime.types;
 +
    default_type  application/octet-stream;
 +
 +
    log_format  main  '$remote_addr - $remote_user [$time_local] $status '
 +
                      '"$request" $body_bytes_sent "$http_referer" '
 +
                      '"$http_user_agent" "$http_x_forwarded_for"';
 +
 +
 +
    sendfile        on;
 +
 +
    keepalive_timeout  65;
 +
 +
    gzip  on;
 +
 +
    # HTTP/HTTPS Proxy for BGBilling
 +
    #
 +
    server {
 +
        listen      443;
 +
        server_name  bill.provider.ru gw.provider.ru;
 +
 +
        ssl                  on;
 +
        ssl_certificate      /etc/ssl/certs/gw.pem;
 +
        ssl_certificate_key  /etc/ssl/certs/gw.pem;
 +
 +
    #    ssl_session_timeout  5m;
 +
 +
    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
 +
    #    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
 +
    #    ssl_prefer_server_ciphers  on;
 +
 +
        charset  windows-1251;
 +
 +
        client_max_body_size 10m;
 +
        proxy_set_header Host $host;
 +
        proxy_set_header Connection close;
 +
        proxy_set_header X-Real-IP $remote_addr;
 +
        proxy_read_timeout 60;
 +
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
 +
 +
        location ~ /\.ht {
 +
                deny all;
 +
        }
 +
 +
        location /bgbilling/executer {
 +
                deny all;
 +
        }
 +
 +
        location ~ ^.*/bgbilling/mpsexecuter {
 +
                deny all;
 +
        }
 +
 +
        location /bgbilling {
 +
                proxy_pass https://1.2.3.4:9080/bgbilling;
 +
                proxy_redirect http://bill.provider.ru/bgbilling https://bill.provider.ru/bgbilling;
 +
                proxy_redirect http://1.2.3.4:9080/bgbilling https://bill.provider.ru/bgbilling;
 +
        }
 +
 +
        location / {
 +
            root  /usr/local/www/html;
 +
            index  index.html;
 +
        }
 +
    }
 +
 +
    server {
 +
        listen 80 default;
 +
        server_name bill.provider.ru gw.provider.ru;
 +
 +
        location / {
 +
                rewrite  ^/(.*)$  https://bill.provider.ru/$1 permanent;
 +
                allow all;
 +
        }
 +
    }
 +
}
</pre>
</pre>

Версия 07:55, 21 апреля 2008

При классической схеме сервер биллинга располагается во внутренней сети организации, nginx позволяет организовать доступ извне к серверу Web-статистики и серверам платежных систем.

Первый пример

Не очень хорош, тем что остается открытым наружу сервис executer, предназначеный для обращений клиента биллинга. Зато прост :)

Вот сделал прокси на ngingx. Отлично все летает. SSL слушает и на SSL проксирует. Могет пригодиться...

#user nobody;

worker_processes  1;

error_log  logs/error.log debug;

pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       conf/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] $status '
                      '"$request" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;

    server {
      
        listen               443; # что слушать  
        keepalive_timeout    70;

        ssl                  on;
        ssl_certificate      /usr/local/nginx/conf/host.ru.pam;
        ssl_certificate_key  /usr/local/nginx/conf/host.ru.key;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  10m;

        access_log  logs/host.access.log  main;

        # Main location
        location / {
            
            proxy_pass         https://192.168.12.1:8443/; # куда проксировать
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            client_max_body_size       10m;
            client_body_buffer_size    128k;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;

            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
        }
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }     
    }

Второй пример пример

Сервер биллинга расположен на внутреннем сервере 1.2.3.4. Клиент заходит на страницу https://bill.provider.ru либо https://gw.provider.ru и его запросы пробрасываются на http порт внутреннего сервера.

Обратите внимание на закрытые сервисы executer, mpsexecuter. Их можно открыть для доверенных адресов (сотрудников с правом входа извне, серверов платежных систем).

user  nginx;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] $status '
                      '"$request" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    # HTTP/HTTPS Proxy for BGBilling
    #
    server {
        listen       443;
        server_name  bill.provider.ru gw.provider.ru;

        ssl                  on;
        ssl_certificate      /etc/ssl/certs/gw.pem;
        ssl_certificate_key  /etc/ssl/certs/gw.pem;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    #    ssl_prefer_server_ciphers   on;

        charset  windows-1251;

        client_max_body_size 10m;
        proxy_set_header Host $host;
        proxy_set_header Connection close;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 60;
        gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;

        location ~ /\.ht {
                deny all;
        }

        location /bgbilling/executer {
                deny all;
        }

        location ~ ^.*/bgbilling/mpsexecuter {
                deny all;
        }

        location /bgbilling {
                proxy_pass https://1.2.3.4:9080/bgbilling;
                proxy_redirect http://bill.provider.ru/bgbilling https://bill.provider.ru/bgbilling;
                proxy_redirect http://1.2.3.4:9080/bgbilling https://bill.provider.ru/bgbilling;
        }

        location / {
            root   /usr/local/www/html;
            index  index.html;
        }
    }

    server {
        listen 80 default;
        server_name bill.provider.ru gw.provider.ru;

        location / {
                rewrite  ^/(.*)$  https://bill.provider.ru/$1 permanent;
                allow all;
        }
    }
}
Личные инструменты