Nginx 代理配置 與 SSL 證書配置

上一章我們簡單說明了Nginx 是什麼,可以幹什麼,那麼,在這裏我就對使用方面做一些講解。

 

前提:

         一臺服務器,一個域名,多個子域名,外加SSL 證書,實現通過 80 端口,進行域名區分,映射

需要實現的功能:

        1.通過Nginx 對 域名進行反向代理,並且做簡單的負載均衡

        2.對子域名進行不同的代理配置,遇到對應的子域名,跳轉到對應的服務

        3.SSL 證書配置, HTTP 轉爲 HTTPS (這裏只有1個單域名證書)

 

我先展示我的全部配置代碼:

user  nginx;
worker_processes  1;

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

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
   
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    upstream blog {  
            server 172.17.0.2:8888;  
            server 172.17.0.3:8888;  
            server 172.17.0.4:8888;          
    }
    upstream api {
        server 172.17.0.7:10000;
    }
    upstream yapi {
        server 172.17.0.12:9191;
    }

    server {
        listen 80;
        server_name yapi.iuver.cn;

        location / {
            proxy_pass http://yapi/;            
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        }
    }

    server {
        listen 80;
        server_name git.iuver.cn;

        location / {
            proxy_pass http://gitee.com/billy_git/projects; 
        }
    }

    server {
        listen 80;
        server_name www.iuver.cn iuver.cn; 

        rewrite ^(.*)$  https://$host$1 permanent;  
    }

    server {
        listen 443 ssl;
        server_name www.iuver.cn iuver.cn;

        ssl on;    
        ssl_certificate  cert/1600551_www.iuver.cn.pem;
        ssl_certificate_key cert/1600551_www.iuver.cn.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;      

        location / {
            proxy_pass http://blog/;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

        location /api {
            proxy_pass   http://api/;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        } 
    }

}

 

對於我們的配置, 主要關注點在  http {} 整個模塊中

      1,實現對域名進行反向代理,並且做簡單的負載均衡

         我首先對我個人的網站進行一個反向代理,並且做一個簡單的負載均衡,代碼如下

upstream blog {  
    server 172.17.0.2:8888;  
    server 172.17.0.3:8888;  
    server 172.17.0.4:8888;          
}

server {
    listen 80;
    server_name www.iuver.cn iuver.cn;
    
    location / {
        proxy_pass http://blog/;
    }
}

          此段代碼是完整代碼中拆解出來的,通過監聽 80 端口,對 www.iuver.cn、iuver.cn 進行反向代理作業,代理作業內容爲 upstream  blog 代碼塊中的服務器地址及端口,並且是一個簡單的負載模式,每個請求會平均分攤到每個 Server 中的地址去,當然,每個 Server 也可以進行其他的一些設置, 比如說權重,根據權重,對於反向代理的分配也會根據權重的不同。

 

    2,實現對子域名進行不同的代理配置,遇到對應的子域名,跳轉到對應的服務

upstream yapi {
    server 172.17.0.12:9191;
}

server {
    listen 80;
    server_name yapi.iuver.cn;

    location / {
        proxy_pass http://yapi/;            
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    }
}

server {
    listen 80;
    server_name git.iuver.cn;

    location / {
        proxy_pass http://gitee.com/billy_git/projects; 
    }
}

       此段代碼分別對我的2個子域名進行了解析,並且分別做了 正向代理 和 反響代理,2個作業,yapi 爲反響代理,git 爲正向代理

 

      3.實現SSL 證書配置, HTTP 轉爲 HTTPS (這裏只有1個單域名證書)

upstream blog {  
    server 172.17.0.2:8888;  
    server 172.17.0.3:8888;  
    server 172.17.0.4:8888;  
}

server {
    listen 80;
    server_name www.iuver.cn iuver.cn; 
    
    rewrite ^(.*)$  https://$host$1 permanent;  
}

server {
    listen 443 ssl;
    server_name www.iuver.cn iuver.cn;
    
    ssl on;
    ssl_certificate  cert/1600551_www.iuver.cn.pem;
    ssl_certificate_key cert/1600551_www.iuver.cn.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;  
    
    location / {
        proxy_pass http://blog/;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP$remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location /api {
        proxy_pass   http://api/;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP$remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    } 
}

      這裏是 SSL 證書配置,監聽 80 端口, 遇到 www.iuver.cn、iuver.cn 時 會對請求協議類型進行拆解,通過以下代碼轉換爲 HTTPS 安全類型進行請求。

rewrite ^(.*)$  https://$host$1 permanent;

   證書配置監聽端口爲 443, 這裏會對 80 端口改變的請求類型進行監聽,然後做對應的轉換及認證工作,並作請求轉發等工作

 

  以上內容是我目前使用到 Nginx 的相關內容,不是很全,也不是很詳細,但是重在分享,歡迎大家一起交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章