acceptero (acceptero) wrote,
acceptero
acceptero

nginx. Обратный прокси.

Задался я вопросом о том как прокинуть наружу несколько web страничек из локальной сети, которые находятся на разных серверах. Ну понятное дело, что проще всего прописаь в iptables правиль и каждую web страницу на свой порт повесить, но тогда снаружи шлюз выглядит как решето ). Не нравился мне этот вариант и я пошел на форум спросить как данную проблему люди решают: http://www.linux.org.ru/forum/admin/6892426?lastmod=1319038794302
А люди говорят, что надо пользоваться NGINX-ом.

Как же его настраивать?

Ну предположим, что в локальной сети 2 сервера (192.168.11.1 и 192.168.11.2), на каждом их них стоит apache2, и нам нужно чтобы присоединившись к внешнему адресу шлюза(xxx.xxx.xxx.xxx), за которым те самые 2 сервера, по 80-му порту мы бы увидели нужный нам сайт.

Так вот вначале поставим nginx:
# aptitude install nginx


На Debian 6 Squeeze конфигурационные файлы для nginx-а располагаются в папке /etc/nginx и в файл nginx.conf записано следующее:
user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;                                                                                                                                                                                         
    tcp_nodelay        on;                                                                                                                                                                                         
                                                                                                                                                                                                                   
    gzip  on;                                                                                                                                                                                                      
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";                                                                                                                                                                          
                                                                                                                                                                                                                   
    include /etc/nginx/conf.d/*.conf;                                                                                                                                                                              
    include /etc/nginx/sites-enabled/*;                                                                                                                                                                            
}


Стоит обратить внимание на строчку include /etc/nginx/conf.d/*.conf;, она показывает нам что конфигурационные файлы с расширением .conf считываются из папки /etc/nginx/conf.d/, в ней мы и создадим файл proxy.conf:
# touch /etc/nginx/conf.d/proxy.conf


теперь заполним данный файл в соответствии с нашими нуждами:
# EXTERNAL HTTP LISTENER ###################################################

server {
        listen           xxx.xxx.xxx.xxx:80;
        server_name      mysite.com;
        access_log       /var/log/nginx/mysite.com-access.log;
        include          /etc/nginx/proxy.pref;
        
        location / {
                root                  /var/www;
                index                 index.html index.htm;
        }

        location /tram-pam1 {
                proxy_pass            http://192.168.11.1:9090/mail/user;
                proxy_redirect        default;
        }

        location /tram-pam2 {
                proxy_pass            http://192.168.11.2/zabbix;
                proxy_redirect        default;
        }


В файл /etc/nginx/proxy.pref добавляем еще некоторые настройки, как бы конкретизируем поведение нашего сервера, но в принципе и без них все бы работало:

proxy_set_header           Host             $host:80;
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;
client_header_buffer_size  64k;

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;


После чего перезапускаете nginx:
# /etc/init.d/nginx restart


и пытаетесь снаружи прицупиться к вашему серверу по адресу http://mysite.com/tram-pam1 вследствие чего отображается страничка сайта http://192.166.11.1:9090/mail/admininfo, все просто. Если же вы останетесь на http://mysite.com/ то вы должны увидеть страницы index.* из папки /var/www/.

А допустим если необходимо прокинуть наружу https соединение. тогда мы просто дополняем файл proxy.conf следующим содержимым:
# EXTERNAL HTTPS LISTENER ##################################################

server {
        listen            xxx.xxx.xxx.xxx:443;
        server_name       mysite.com;

        access_log       /var/log/nginx/ssl-access.log;

        ssl                     on;
        ssl_protocols           SSLv3 TLSv1;
        ssl_certificate         /etc/nginx/ssl/cert.pem;
        ssl_certificate_key     /etc/nginx/ssl/cert.key;


        location / {
                proxy_pass            https://192.168.11.2/admininfo;
                proxy_redirect        off;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_pass_header Set-Cookie;
        }

}


после чего необходимо создать папку /etc/nginx/ssl/ и перейдя в неё сгененрировать сертификат:
root@gate:/etc/nginx/ssl$ openssl req -new -x509 -days 2000 -nodes -out cert.pem -keyout cert.key


Не забываем изменить права доспупа к сертификатам:
# chmod -R 600 /etc/nginx/ssl


откуда что взялось:
http://www.linux.org.ru/forum/admin/6892426?lastmod=1319038794302
http://www.linux.org.ru/forum/admin/7004503
http://www.linux.org.ru/forum/admin/7031640?lastmod=1322122158587
и
русское сообщество nginx
Tags: computers, debian, life, linux, nginx, web
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment