概述
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
場景
統一鑒權 | 目錄重定向 | 絕對和相對路徑
使用要求:
- 外網服務器僅開放一個端口9999,該端口需要實現多種web服務
- web服務需要進行鑒權服務
設計要求:
- 上面的需求可以通過nginx反向代理實現
- 需要配置服務器,使外部端口9999映射到nginx服務器的8081端口(8081端口可以按需自定義)
- 通過訪問不同的url實現訪問不同的服務(如下表)
- 鑒權方式可以使用htpasswd來實現
- 為了跳轉正常,有的需要絕對目錄有的需要相對目錄
外部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;
}
}
注意:
- 因為條件有限,上面的配置,並不包含NAT的過程。如果服務處於NAT后,上面的配置需要做如下變更:其中
9999
對應的是外部的端口proxy_set_header Host $host:9999;
location ^~
中的^~
為匹配前綴路徑,詳見參考
增加賬號:
touch htpasswd.conf (首次執行必選)
htpasswd -b htpasswd.conf $usrname $passwd
創建source對應的服務:
- 以開源代碼simple-tftp為例,通過doxygen生成html(doxygen如何使用,見我的博客), html存放路徑:
wsk@wsk:~/nginx/source/simple-tftp/html
- 通過python創建http服務:
sudo python3 -m http.server 666
(首先需要cd到上面目錄中)
創建git對應的服務:
- 以開源代碼simple-tftp為例,直接通過創建http服務
sudo python3 -m http.server 777
- git服務使用的相對路徑,所以創建http服務的路徑必須包含git目錄
不帶路徑訪問
帶路徑訪問
訪問source: 第一次訪問的時候,會先進行鑒權,當鑒權成功后才能繼續訪問重定向的網站
訪問git服務: 如果第一次訪問source已經輸入過密碼了,這次訪問git就不需要再次輸入。