星期日, 2月 23, 2020

nginx with openSUSE Leap 15.1 in Azure 小記

nginx with openSUSE Leap 15.1 in Azure 小記


OS: openSUSE Leap 15.1 in Azure
Nginx: 1.14.2


之前 web 服務都是使用 Apache 比較多, 但是最近覺得要會 nginx 才能符合之後的需求, 所以開始來練習 nginx :) 今天主要練習
  • Nginx 作爲靜態網頁
  • Nginx 作為 Proxy Server


Nginx


使用環境 openSUSE Leap 15.1 in Azure
  • 已經登入到 Azure Portal 並建立一台 openSUSE Leap 15.1
  • 使用 ssh 連線在 Azure 上面的 openSUSE Leap 15.1


先來使用 zypper 指令 安裝 nginx 


# zypper  install  nginx


Loading repository data...
Reading installed packages...
Resolving package dependencies...


The following 9 NEW packages are going to be installed:
  libXpm4 libgd3 libjbig2 libjpeg8 libtiff5 libwebp6 libxslt1 nginx vim-plugin-nginx


The following recommended package was automatically selected:
  vim-plugin-nginx


9 new packages to install.
Overall download size: 1.7 MiB. Already cached: 0 B. After the operation, additional 4.8 MiB will be used.
Continue? [y/n/v/...? shows all options] (y):  Y


觀察服務狀態


# systemctl status nginx


● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: inactive (dead)


啟動 nginx 服務


# systemctl start nginx


觀察相關資訊


# systemctl status nginx


● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-02-20 13:00:00 UTC; 1s ago


確認開機是否會自動啟動


# systemctl  is-enabled  nginx
disabled


設定開啟自動啟動


# systemctl  enable  nginx


Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.


再次觀察
# systemctl  is-enabled  nginx
enabled


這樣 nginx 就已啟動然後開機後也會自動啟動


Lab 1: 測試靜態網頁


觀察 listen port
  • 早期是用 netstat 指令, 現在是用 ss 指令了


# ss  -tupln


Netid State      Recv-Q Send-Q                                 Local Address:Port                     Peer Address:Port              
udp   UNCONN     0 0                                         0.0.0.0%eth0:68                       0.0.0.0:* users:(("wickedd-dhcp4",pid=685,fd=9))
tcp   LISTEN     0 128                                             0.0.0.0:80             0.0.0.0:* users:(("nginx",pid=120751,fd=6),("nginx",pid=120750,fd=6))
tcp   LISTEN     0 128                                             0.0.0.0:22             0.0.0.0:* users:(("sshd",pid=1189,fd=3))
tcp   LISTEN     0 128                                                 [::]:22           [::]:* users:(("sshd",pid=1189,fd=4))


有觀察到 port 80 listen, 但是這個是本機的狀況, 要可以對外連線, 還要在 Azure 上面設定 Security Group 讓 網路流量可以通過


在 Azure 該 VM 的網路設定內, 點選 新增輸入連接埠規則,設定 port 80 可以連線




接下來測試網頁狀況


在瀏覽器開啟 http://YOUR_SERVER_IP


  • 這個時候會得到 403 Forbidden, 


觀察 error.log
# cat  /var/log/nginx/error.log


2020/02/20 13:01:32 [error] 120751#120751: *1 directory index of "/srv/www/htdocs/" is forbidden,


藉由 nginx -t 來觀察設定檔位置以及有沒有問題


# nginx  -t


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful


  • 從這邊可以得知設定檔在 /etc/nginx/nginx.conf


觀察一下目前的設定檔


# egrep  -v  '^$|^#|#'  /etc/nginx/nginx.conf 


worker_processes  1;
events {
    worker_connections  1024;
    use epoll;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include conf.d/*.conf;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /srv/www/htdocs/;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /srv/www/htdocs/;
        }
    }
    
    include vhosts.d/*.conf;
}


整理一下
  • 網站的根目錄應該是在 /srv/www/htdocs
  • 首頁的檔案應該是 index.html 或是 index.htm
  • 觀察  /etc/nginx/conf.d/ 目錄下     - 沒有檔案
  • 觀察  /etc/nginx/vhosts.d/ 目錄下 - 沒有檔案


觀察一下資訊
# ls  /srv/www/htdocs/
50x.html


該目錄中, 並沒有 index.html 或是 index.htm,  所以就會 Forbidden


嘗試建立 /srv/www/htdocs/index.html
# vim  /srv/www/htdocs/index.html


<html> This is lab site </html>


測試是否生效
在瀏覽器開啟 http://YOUR_SERVER_IP




到這邊的話, 基本的靜態網頁測試就應該可以了

Lab 2:  測試 Proxy Server 的用法


為了要有測試的感覺, 先把 docker 服務啟動


# systemctl  start  docker


觀察服務狀態


# systemctl  status  docker


● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor pre>
   Active: active (running) since Sat 2020-02-22 04:12:17 UTC; 5min ago


執行 container 然後 port 開在 8080 
# docker  run  -d  -p  8080:80  russmckendrick/cluster


在 Azure 該 VM 的網路設定內, 設定 port 8080 可以連線






測試是否生效
在瀏覽器開啟 http://YOUR_SERVER_IP:8080




應該會看到網頁以及該 container 的 id


從這邊我們可以觀察到這個服務是正常的


接下來要進行 Proxy Server 的測試
測試想法
  • 當使用者連線到某個網域名稱( FQDN ), 就會轉到 本機 port 8080


將剛剛 Azure 上面的安全性規則, 允許 port 8080 刪除




再次嘗試存取剛剛的網站 觀察相關資訊
在瀏覽器開啟 http://YOUR_SERVER_IP:8080


這個時候其實會發現無法存取 ( 因為安全性規則 firewall 已經被刪除)


開始進行實作
在 Azure 上面替 openSUSE Leap 15.1 設定 DNS 名稱


在 VM 的概觀頁面上面可以看到有 DNS 設定的按鈕
點選 設定
  • 這個動作其實是會進入該公用 IP 的組態內




輸入 DNS 名稱




點選儲存
這個時候這個 VM 就會將這個名稱綁定公用 IP


修改 nginx 設定檔


# vim   /etc/nginx/nginx.conf


worker_processes  1;
events {
    worker_connections  1024;
    use epoll;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include conf.d/*.conf;
    server {
       server_name test20200222.eastus.cloudapp.azure.com;
       location / {
       proxy_pass http://127.0.0.1:8080;
       }
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /srv/www/htdocs/;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /srv/www/htdocs/;
        }
    }
    
    include vhosts.d/*.conf;
}


  • 在  http 區段內新增一個 server 區段
  • server_name 指定剛剛綁定的 FQDN
  • Proxy_pass 指向 port 8080


這邊要善用  nginx -t 來檢查相關設定


進行測試
在瀏覽器開啟 http://test20200222.eastus.cloudapp.azure.com
這個時候會看到剛剛啟動的網頁
Proxy Server 功能測試完畢


整理資訊
  • 設定檔 /etc/nginx/nginx.conf
    • 相關目錄 /etc/nginx
  • Log 目錄 : /var/log/nginx


這樣算是朝向 nginx 的一小步  :)


~ enjoy it


Reference

沒有留言: