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

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

Перейти к: навигация, поиск

При классической схеме сервер биллинга располагается во внутренней сети организации, 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;
        }
    }
}
Личные инструменты