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

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

(Различия между версиями)
Перейти к: навигация, поиск
 
(1 промежуточная версия не показана)
Строка 1: Строка 1:
При классической схеме сервер биллинга располагается во внутренней сети организации,  
При классической схеме сервер биллинга располагается во внутренней сети организации,  
'''nginx''' позволяет организовать доступ извне к серверу Web-статистики и серверам платежных систем.
'''nginx''' позволяет организовать доступ извне к серверу Web-статистики и серверам платежных систем.
 +
 +
Документация по nginx доступна здесь: http://sysoev.ru/nginx/docs/.
== Первый пример ==
== Первый пример ==
 +
Позволяет прозрачно проксировать обращения к Web-статистике пользователя по адресу вида http://www.domain.ru на стандартный порт биллинга 8080 и стандартный контекст /bgbilling. Закрывает обращение к "опасным" сервлетам (executer, idealer и пр.). В примере вместо <server_name> подставляется ваш адрес страницы статистики, на который пойдет пользователь (типа www.domain.ru). Вместо <billing_server> требуется подставить IP адрес сервера биллинга, на который проксируются запросы.
 +
 +
<pre>
 +
user  root;
 +
 +
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              80;
 +
server_name <server_name>;
 +
keepalive_timeout    70;
 +
 +
access_log  logs/host.access.log  main;
 +
 +
# запросы к / перенаправлять на webexecuter
 +
rewrite ^/$ /bgbilling/webexecuter last;
 +
 +
# ко всем запросам добавлять префикс /bgbilling
 +
rewrite ^/(.*)$ /bgbilling/$1 last;
 +
 +
# запросы клиента биллинга
 +
location /bgbilling/executer {
 +
                deny all;
 +
        }
 +
# прием платежей модуль MPS
 +
        location /bgbilling/mpsexecuter {
 +
                deny all;
 +
        }
 +
 +
# дилерские платежи (старая система)
 +
location /bgbilling/dealer {
 +
                deny all;
 +
        }
 +
 +
# дилерские платежи
 +
location /bgbilling/idealer {
 +
                deny all;
 +
        }
 +
 +
location /bgbilling/ {
 +
proxy_pass http://<billing_server>:8080;
 +
proxy_redirect http://<server_name>/bgbilling /;
 +
 +
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;
 +
}
 +
  }
 +
}
 +
</pre>
 +
 +
== Второй пример ==
Не очень хорош, тем что остается открытым наружу сервис '''executer''', предназначеный для обращений клиента биллинга.  
Не очень хорош, тем что остается открытым наружу сервис '''executer''', предназначеный для обращений клиента биллинга.  
Зато прост :)
Зато прост :)
Строка 81: Строка 165:
</pre>
</pre>
-
== Второй пример пример ==
+
== Третий пример ==
Сервер биллинга расположен на внутреннем сервере 1.2.3.4.
Сервер биллинга расположен на внутреннем сервере 1.2.3.4.
Клиент заходит на страницу https://bill.provider.ru либо https://gw.provider.ru и его запросы пробрасываются на http порт внутреннего сервера.
Клиент заходит на страницу https://bill.provider.ru либо https://gw.provider.ru и его запросы пробрасываются на http порт внутреннего сервера.

Текущая версия на 11:40, 5 ноября 2008

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

Документация по nginx доступна здесь: http://sysoev.ru/nginx/docs/.

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

Позволяет прозрачно проксировать обращения к Web-статистике пользователя по адресу вида http://www.domain.ru на стандартный порт биллинга 8080 и стандартный контекст /bgbilling. Закрывает обращение к "опасным" сервлетам (executer, idealer и пр.). В примере вместо <server_name> подставляется ваш адрес страницы статистики, на который пойдет пользователь (типа www.domain.ru). Вместо <billing_server> требуется подставить IP адрес сервера биллинга, на который проксируются запросы.

user  root;

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               80;
		server_name <server_name>; 
		keepalive_timeout    70;
														
		access_log  logs/host.access.log  main;
			
		# запросы к / перенаправлять на webexecuter
		rewrite ^/$ /bgbilling/webexecuter last;

		# ко всем запросам добавлять префикс /bgbilling
		rewrite ^/(.*)$ /bgbilling/$1 last;
			
		# запросы клиента биллинга
		location /bgbilling/executer {
                	deny all;
        	}
		# прием платежей модуль MPS
        	location /bgbilling/mpsexecuter {
                	deny all;
        	}
		
		# дилерские платежи (старая система)
		location /bgbilling/dealer {
                	deny all;
        	}
		
		# дилерские платежи		
		location /bgbilling/idealer {
                	deny all;
        	}
								
		location /bgbilling/ {
				proxy_pass http://<billing_server>:8080;
				proxy_redirect http://<server_name>/bgbilling /;

				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;
		}
	  }
}

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

Не очень хорош, тем что остается открытым наружу сервис 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;
        }
    }
}
Личные инструменты