• Setup SSL Reverse Proxy (Load Balanced SSL Proxy)

  • ITtoday.vn - Một proxy ngược lại là một máy chủ proxy được cài đặt trong một mạng lưới máy chủ. Thông thường, các proxy đảo ngược được sử dụng ở phía trước của máy chủ web như Apache, IIS, và Lighttpd. Làm thế nào để thiết lập máy chủ web nginx như SSL proxy ngược?

  • Sunday, 26 July 2015, 05:07:33 PM
  • Setup SSL Reverse Proxy (Load Balanced SSL Proxy)
  • Khi bạn đã nhiều máy chủ web phụ trợ, mã hóa / tăng tốc SSL có thể được thực hiện bởi một proxy ngược lại. Nginx có thể hoạt động như phần mềm tăng tốc SSL. Nó cung cấp các lợi ích sau:

    • Dễ dàng sử dụng: Nginx là dễ cài đặt và nâng cấp.
    • An ninh: Nginx cung cấp thêm một lớp bảo vệ như Apache là sau proxy. Nó có thể bảo vệ chống lại các cuộc tấn công dựa trên web phổ biến quá.
    • Phân phối tải: nginx sử dụng rất ít bộ nhớ và có thể phân phối tải trọng đến một số máy chủ Apache. Nó thậm chí có thể viết lại url trên bay.
    • Bộ nhớ đệm: hành động Nginx như một proxy đảo ngược mà giảm tải các máy chủ Web của bộ nhớ đệm nội dung tĩnh, chẳng hạn như hình ảnh, css, js, các trang html tĩnh và nhiều hơn nữa.
    • Nén: Nginx có thể tối ưu hóa và nén các nội dung để tăng tốc độ thời gian tải.

    Mẫu của chúng tôi:


    Internet--
             |
        =============                               |---- apache1 (192.168.1.15)
        | ISP Router|                               |
        =============                               |---- apache2 (192.168.1.16)
             |                                      |
             |                                      |---- db1 (192.168.1.17)
             |      |eth0 -> 192.168.1.11 ----------/
             |-lb0==|                          /
             |      |eth1 -> 202.54.1.1:443---/
             |
             |      |eth0 -> 192.168.1.10 ----------\
             |-lb1==|                          /    |---- apache1 (192.168.1.15)
                    |eth1 -> 202.54.1.1:443---/     |
                                                    |---- apache2 (192.168.1.16)
                                                    |
                                                    |---- db1 (192.168.1.17)

    • lb0 – Linux box directly connected to the Internet via eth1. This is master SSL load balancer.
    • lb1 – Linux box directly connected to the Internet via eth1. This is backup SSL load balancer. This will become active if master networking failed.
    • 202.54.1.1 A virtual IP address that moves between lb0 and lb1. It is managed by keepalived.
    • nginx – It is installed on lb0 and lb1.
    • SSL Certificate – You need to install ssl certificates on lb0 and lb1.

    For demonstration purpose I’m going to use Self-signed SSL certificate, but you can use real SSL certificate signed by CAs.

    +------+ +-------------+        +-------------------+
    |Client|  <---> |SSL-Nginx:443| <----> |Apache-HTTP_mode:80|
    +------+        +-------------+        +-------------------+

    • You’ve the SSL connection between client and Nginx.
    • Then Nginx act as proxy server and makes unencrypted connection to Apache at port 80.
    • Nginx can cache all static file and other files.

    Tạo chứng chỉ tự gán


    First, create required directories:
    # cd /usr/local/nginx/conf
    # mkdir ssl
    # cd ssl
    To create a private key, enter:
    # openssl genrsa -des3 -out nixcraft.in.key 1024


    Sample outputs:

    Fig.01: OpenSSL - Create a Private Key

    Fig.01: OpenSSL – Create a Private Key
    To create a CSR (Certificate Signing Request):
    # openssl req -new -key nixcraft.in.key -out nixcraft.in.csr

    Kết quả đầu ra

    Fig.02: OpenSSL - Create a CSR (Certificate Signing Request)

    Fig.02: OpenSSL – Create a CSR (Certificate Signing Request)
    Please enter your domain name that you want to associate with the certificate. For example, for the Command Name I entered nixcraft.in as I’m going to use https://nixcraft.in/.

    Làm thế nào để Hủy bỏ Các cụm mật khẩu? (Tùy chọn)

    Bạn có thể loại bỏ các cụm từ mật khẩu để nginx có thể bắt đầu khi khởi động mà không cần nhập mật khẩu. Gõ các lệnh sau
    # cp nixcraft.in.key nixcraft.in.key.bak
    # openssl rsa -in nixcraft.in.key.bak -out nixcraft.in.key
    Finally, you should see three files as follows (note I’ve created all files as vivek user and than moved lb0 and lb1 server /usr/local/ngnix/conf/ssl/ directory):
    # ls -l


    Kết quả đầu ra

    Fig.03: All the files in ssl directory

    Fig.03: All the files in ssl directory
    # openssl x509 -req -days 365 -in nixcraft.in.csr -signkey nixcraft.in.key -out nixcraft.in.crt
    Sample outputs:

    Fig.04: Generating The Actual Self-signed  SSL Certificate

    Fig.04: Generating The Actual Self-signed SSL Certificate

    How Do I Copy SSL Certificates Files To lb1?
    You need to copy those files to lb1, enter:
    # ssh root@lb1 mkdir /usr/local/ngnix/conf/ssl
    # rsync -av /usr/local/ngnix/conf/ssl/* root@lb1:/usr/local/ngnix/conf/ssl/

    Configure Nginx As SSL Reverse Proxy (lb0 and lb1)
    Edit nginx.conf, enter (you need to edit files on both lb0 and lb1):
    # vi /usr/local/ngnix/conf/nginx.conf
    Edit / append as follows:


    server {
    ### server port and name ###
            listen          443 ssl;
            server_name     nixcraft.in;

    ### SSL log files ###
            access_log      logs/ssl-access.log;
            error_log       logs/ssl-error.log;

    ### SSL cert files ###
            ssl_certificate      ssl/nixcraft.in.crt;
            ssl_certificate_key  ssl/nixcraft.in.key;
    ### Add SSL specific settings here ###
            keepalive_timeout    60;

    ###  Limiting Ciphers ########################
            # Uncomment as per your setup
    #ssl_ciphers HIGH:!ADH;
            #ssl_perfer_server_ciphers on;
            #ssl_protocols SSLv3;
            ##############################################
    ### We want full access to SSL via backend ###
          location / {
             proxy_pass  http://nixcraft;
      ### force timeouts if one of backend is died ##
             proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

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

      ### Most PHP, Python, Rails, Java App can use this header ###
             proxy_set_header X-Forwarded-Proto https;

      ### By default we don't want to redirect it ####
             proxy_redirect     off;
          }
    Save and close the file. Reload nginx:
    # /usr/local/nginx/sbin/nginx -t
    # /usr/local/nginx/sbin/nginx -s reload
    Verify port is opened:
    # netstat -tulpn | grep :443

    How Do I Test And Debug SSL Certificates From The Shell Prompt?
    Use the openssl command as follows:
    $ openssl s_client -connect nixcraft.in:443

    How Do I Cache Common Files?
    Edit nginx.conf and add as follows to cache common files:

    location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
            proxy_buffering           on;
            proxy_cache_valid 200 120m;
            expires 864000;
    }
    Save and close the file. Reload nginx:
    # nginx -s reload

     

    • Hãy liên hệ với chúng tôi để được tư vấn:

      ITtoday

      VP Miền Bắc: 124 Minh Khai, Hai Bà Trưng, Hà Nội - ĐT: 0986.973.209 / 0962.604.887 / 01234.08.1987
      VP Miền Nam: 53/21 Đường 18, Khu phố 5, Phường Ninh Chung,  Quận Thủ Đức, TP Hồ Chí Minh. - ĐT: 0976.413.635
      Email: itotdayvn@gmail.com
      Website: www.ittoday.vn