Quick Start

狀況/問題

  • 當我們僅有一個 IP,一個實體主機,卻需要同時利用多虛擬機來提供不同服務時
  • 或是需要利用一個實體主機來指向不同內網的實體主機時

當上述狀況發生時,通常會有兩個方法來達成,

  • 利用 DNS 分層進行解析位置
  • 利用不同 port 來分開處理不同的服務

利用不同 DNS 的例子

有兩虛擬機伺服器 (VM1,VM2) 分別有兩個網址

  • abc.example.com.tw (VM1) 指到 111.222.111.222
  • def.example.com.tw (VM2) 指到 111.222.111.222

而此兩個網址皆由電信公司代管,此時可以用 nginx 反向代理伺服器來處理

  • 利用實體主機或是虛擬機上安裝 nginx
  • 將外部連入 port 80 (www,http) 的服務導入
  • 利用 nginx 的 domain vhost 偵測連入的網址,若是 abc.example.com.tw 則轉向 VM1,若是 def.example.com.tw 則轉向 VM2

利用不同 port 的例子

而很多實施例則是利用不同 port 來達成,如下有兩台虛擬機,資訊分別如下:

  • System01 (VM1); inner IP: 192.168.56.101
  • System02 (VM2); inner IP: 192.168.56.102

而實體主機資訊為 System.main; Outer IP: 10.12.52.89,而實施例概念如下;

  • 在實體機上安裝 nginx,並提供反向代理服務
  • 根據不同的連入 port 來提供在不同虛擬機上的福務
  • 而兩台虛擬機上皆有 apache 提供正向伺服器的服務

安裝 nginx,舉 CentOS 6.4 為例

先在負責軟體更新與安裝的資料夾下,編輯 nginx 相關的安裝資料

$ sudo vim /etc/yum.repos.d/nginx.repo

然後鍵入下列資料

[nginx]
name=nginx repo 
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

然後利用 yum 來進行安裝 nginx

sudo yum install nginx

之後可以利用 rpm 來查看安裝後的文件放置位址

rpm -ql nginx

安裝完成後,就可以利用 service 來開啟 nginx 服務

sudo service nginx restart

設置反向代理位址

設定 nginx 反向代理的檔案位置為 /etc/nginx,而底下有兩個資料夾;

  • 主要設定資料夾: /etc/nginx/ (主要檔案:nginx.conf)
  • 擴充設定資料夾: /etc/nginx/conf.d/ (擴充檔案:*.conf)

而當我們要設置反向代理的資訊時,可以在 /conf.d/ 下放置一個副檔名為 .conf 檔案即可,舉例而言:

  • 設定主機監聽 port 8100
  • 將連入 8100 port 的服務導向 inner IP (VM allocated) 192.168.56.101 的虛擬機 1 (System01)

而設定檔案可以設置如下

server {
    listen        8100;
    server_name    10.12.52.89;

    charset        utf8;
    access_log    /var/log/nginx/system01.log    main;

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

其中 proxy_pass 便是要導向的 inner IP 位址,80 為導入的 port,之後再重新啟動一次服務即可

$ sudo service nginx restart

若是設置上沒有問題,但仍然不能 access,可以嘗試朝 firewall 的方面來處理

nginx 提供的首頁與網站放置資料夾

此資料夾位於 /usr/share/nginx/html,而內含有如 default.html 與 50x.html 等預設的 html 文件

nginx 設定 Access-Control-Allow-Origin

  • 底下是 site-availables 底下其中一組態範例
server {
    listen 9080;

    server_name 127.0.0.1;

    client_max_body_size 1000M;
    access_log /var/log/nginx/ckan_access.log;
    error_log /var/log/nginx/ckan_error.log error;
    charset utf8;

    location / {
        add_header Access-Control-Allow-Origin *;
        include uwsgi_params;
        uwsgi_pass unix:///tmp/ckan_socket.sock;
        uwsgi_param SCRIPT_NAME '';
    }
}

location / 底下設置即可

add_header Access-Control-Allow-Origin *

安裝於 Ubuntu

  • 底下舉 ubuntu 16.04 為例
$ sudo apt-get update
$ sudo apt-get install nginx nginx-extras php php-fpm
  • Check the fastcgi pass configuration.
# the following is the default setting
# listen = /run/php/php7.0-fpm.sock
$ cat /etc/php/7.0/fpm/pool.d/www.conf | grep 'listen ='
  • Edit the configuration.
$ sudo vim /etc/nginx/sites-available/default
  • And add the following block to the configuration.
server {
    listen 80;
    root /usr/share/nginx/html;
    server_name example.com;
    index index.php index.html;
    access_log /var/log/nginx/jiankaiwang.access.log;
    error_log /var/log/nginx/jiankaiwang.error.log;

    # pass the PHP scripts to FastCGI server listening on the php-fpm socket
    location ~* \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

results matching ""

    No results matching ""