Проксирование обращений к BGBillingServer посредством nginx
Материал из BiTel WiKi
Admin (Обсуждение | вклад) (Новая: При классической схеме сервер биллинга располагается во внутренней сети организации, '''nginx''' позволя...) |
Admin (Обсуждение | вклад) |
||
(2 промежуточные версии не показаны) | |||
Строка 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''', предназначеный для обращений клиента биллинга. | ||
Зато прост :) | Зато прост :) | ||
Строка 79: | Строка 163: | ||
} | } | ||
} | } | ||
+ | </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> |
Текущая версия на 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; } } }