nginx應用 📌 反向代理,統一鑒權,目錄重定向


概述

nginx的作用不在此贅述,下面主要記錄部分簡單的使用場景

適用場景:

  • 統一鑒權
  • 目錄重定向
  • 絕對相對路徑
  • 服務處於NAT后(外部端口和內部端口不一致)

非適用場景:

  • 不同端口區分不同服務,參考創建即可

軟件

安裝軟件:需要使用apache2-utils中的htpasswd

sudo apt-get install nginx
sudo apt install apache2-utils

查看服務狀態: +號說明服務處於up狀態

service --status-all
......
[ + ]  nginx
......

修改配置:具體如何修改見后面章節

sudo vi /etc/nginx/sites-enabled/default

重啟nginx服務:修改配置后,需要重啟nginx

service nginx restart

重新安裝

//卸載包含配置文件
sudo apt-get purge nginx nginx-common
//安裝
sudo apt-get install nginx

場景

統一鑒權 | 目錄重定向 | 絕對和相對路徑

使用要求:

  1. 外網服務器僅開放一個端口9999,該端口需要實現多種web服務
  2. web服務需要進行鑒權服務

設計要求:

  1. 上面的需求可以通過nginx反向代理實現
  2. 需要配置服務器,使外部端口9999映射到nginx服務器的8081端口(8081端口可以按需自定義)
  3. 通過訪問不同的url實現訪問不同的服務(如下表)
  4. 鑒權方式可以使用htpasswd來實現
  5. 為了跳轉正常,有的需要絕對目錄有的需要相對目錄
外部URL NAT處理 內部URL
http://$wanip:9999/source/ http://$nginxip:8081/source/ 鑒權成功 --> 打開http://$hostip:666/xxx
http://$wanip:9999/git/xxx http://$nginxip:8081/git/xxx 鑒權成功 --> 打開http://$hostip:777/git/xxx
  • $wanip: 外部IP地址
  • 9999:外部端口
  • $nginxip:外部映射到內部的nginx地址(多數應用或路由器都可以配置)
  • 8081:外部映射到內部的端口(多數應用或路由器都可以配置)
  • $hostip:內網部署的服務地址,可以是在不同的服務器上
  • 666或777:內網部署的服務端口

nginx配置: /etc/nginx/sites-enabled/default 文件內容

server {
        listen 8081;
        server_name localhost;
        location ^~ /source/ {
                auth_basic              "source";
                auth_basic_user_file    /home/wsk/htpasswd.conf;
                proxy_pass              http://127.0.0.1:666/;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
        location ^~ /git/ {
                auth_basic              "git";
                auth_basic_user_file    /home/wsk/htpasswd.conf;
                proxy_pass              http://127.0.0.1:777;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
}

注意:

  1. 因為條件有限,上面的配置,並不包含NAT的過程。如果服務處於NAT后,上面的配置需要做如下變更:其中9999對應的是外部的端口
                proxy_set_header        Host $host:9999;
    
  2. location ^~中的^~為匹配前綴路徑,詳見參考

增加賬號:

touch htpasswd.conf (首次執行必選)
htpasswd -b htpasswd.conf $usrname $passwd

創建source對應的服務:

  1. 以開源代碼simple-tftp為例,通過doxygen生成html(doxygen如何使用,見我的博客), html存放路徑: wsk@wsk:~/nginx/source/simple-tftp/html
  2. 通過python創建http服務: sudo python3 -m http.server 666 (首先需要cd到上面目錄中)

創建git對應的服務:

  1. 以開源代碼simple-tftp為例,直接通過創建http服務sudo python3 -m http.server 777
  2. git服務使用的相對路徑,所以創建http服務的路徑必須包含git目錄
    image

不帶路徑訪問

帶路徑訪問

訪問source: 第一次訪問的時候,會先進行鑒權,當鑒權成功后才能繼續訪問重定向的網站

訪問git服務: 如果第一次訪問source已經輸入過密碼了,這次訪問git就不需要再次輸入。
image

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM