CentOS雲主機中Nginx反向代理http、https服務

gary-liu發表於2016-06-08

代理 http 服務

在目錄/apps/conf/nginx/vhosts新建檔案比如a.test.com,檔案內容如下

server
   {
      listen       80;
      server_name  a.test.com ;   

      location /
       {
         expires      302400s;
         proxy_pass   url;     //自定義要真正訪問的HTTP服務
      }

      access_log  /apps/logs/nginx/a.test.com.log   log_access;
 }

然後在nginx.conf的http塊中新增

include      /apps/conf/nginx/vhosts/*.com;

重啟下nginx,本地配上server_name的host就可以實現http服務的代理

測試

curl --proxy ip:80 http://a.test.com

代理 https 服務

因為 Nginx 不支援 CONNECT,所以無法代理 Https 服務網站。
如果訪問 Https 網站,比如:https://www.baidu.com,Nginx access.log 日誌如下:
“CONNECT www.baidu.com:443 HTTP/1.1” 400

nginx使用ssl模組配置HTTPS支援

這裡要使用到OpenSSL, 在nginx的conf目錄下建立證書和私鑰
建立伺服器私鑰,命令會讓你輸入一個口令

openssl genrsa -des3 -out server.key 1024

建立簽名請求的證書(CSR)

openssl req -new -key server.key -out server.csr

這個命令後會讓填一些證書資訊,詳見參考[2]

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

在載入SSL支援的Nginx並使用上述私鑰時除去必須的口令

cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

最後標記證書使用上述私鑰和CSR

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

下面的配置內容和代理http服務有點類似,還用上面的檔案例子

 server
       {
          listen      443;
          server_name  a.test.com;

          ssl on;
          ssl_certificate /apps/conf/nginx/conf/server.crt;
          ssl_certificate_key /apps/conf/nginx/conf/server.key;

          location /
               {
                 expires      302400s;
                 proxy_pass   https://XXXX;  //這裡可以是http或https  
                }

          access_log  /apps/logs/nginx/a.test.com.log  log_access;

      }

然後配置下本地host就可以了。
還可以將http請求重定向到https,例如下面配置

server {
    listen 80;
    server_name a.test.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}

[參考資料]
[1] nginx使用ssl模組配置HTTPS支援
[2] Nginx 配置 SSL 證書 + 搭建 HTTPS 網站教程

相關文章