本文介紹基於 Linux 系統的 nginx 安裝以及簡單使用
1、安裝
1.1、安裝 nginx 依賴的環境
使用 nginx 需要依賴一些其它的庫,所以需要先準備好基礎環境
# 編譯 nginx 需要依賴 gcc
yum install gcc-c++
# 正則表達式支持
yum install -y pcre pcre-devel
# gzip 壓縮算法支持
yum install -y zlib zlib-devel
# https 支持
yum install -y openssl openssl-devel
1.2、下載 nginx 安裝包
一般下載到/usr/local/
目錄即可,可以直接去官方下載,再上傳到對應目錄。
也可以直接在對應目下執行如下命令下載:
wget -c https://nginx.org/download/nginx-1.18.0.tar.gz
1.3、安裝 nginx
解壓就很簡單了:
tar -zxvf nginx-1.18.0.tar.gz
然後進入解壓後的目錄(/usr/local/nginx-1.18.0),配置 nginx:
./configure
如果需要支持 https,則需要執行如下的配置命令:
./configure --with-http_ssl_module
配置完成後,開始編譯 nginx 源碼:
make
編譯完成後,開始安裝 nginx:
make install
等待安裝完成......
安裝完成後,會生成一個和nginx-1.18.0
目錄同級的nginx
目錄,就是安裝程序的目錄。
1.4、啓動 nginx
進入/usr/local/nginx/sbin
目錄
- 啓動 nginx:
./nginx
啓動後在瀏覽器輸入服務器地址,可以看到如下頁面就好了:
- 關閉 nginx,使用如下一個命令即可:
# 正常關閉
./nginx -s quit
# 暴力關閉
./nginx -s stop
- 重啓 nginx:
# 一般是修改配置文件後重啓
./nginx -s reload
- 查看 nginx 進程:
ps aux|grep nginx
2、簡單使用
這裏主要是對/usr/local/nginx/conf/
中nginx.conf
文件進行相關的配置
2.1、靜態代理
先在/opt/software
下創建test
目錄,裏邊放一個index.html
,內容是:
<h1>Hello World</h1>
接下來對nginx.conf
做如下修改:
server {
listen 8081;
server_name localhost;
location / {
root /opt/software/test;
index index.html;
}
}
重啓 nginx:
./nginx -s reload
在瀏覽器測試:
上邊我們修改了server
部分的配置,這樣當訪問 http://192.168.2.100:8081/index.html 時,nginx 會去/opt/software/test
下找index.html
。
由於index
默認配置成了index.html
,所以訪問 http://192.168.2.100:8081會默認去找index.html
,和上邊的效果一樣。
server
模塊相對於配置了一個站點,可以有多個;listen
配置的是端口號,可以根據需求修改;server_name
設置的是本機的地址,一般不需要修改;location
模塊則是指定站點要代理的靜態資源、或者要轉發的請求。
2.2、請求轉發
添加一個新的server
模塊,使用proxy_pass
配置要轉發到的目標服務地址:
server {
listen 8082;
server_name localhost;
location / {
proxy_pass http://192.168.3.2:1114/;
}
}
注意目標地址末尾有個斜槓,不加斜槓就無法正常的轉發請求了。
重啓 nginx。
目標地址上有一個hello
接口:
@RestController
public class HelloController {
// 服務的端口號
@Value("${server.port}")
Integer port;
@GetMapping("/hello")
public String hello() {
return "hello world" + "#" + port;
}
}
這樣當請求 http://192.168.2.100:8082/hello 時請求會轉發到 http://192.168.3.2:1114/hello 上:
2.3、負載均衡
上邊我們只部署了一個目標服務,如果目標服務是以集羣部署的,則可以使用 nginx 實現負載均衡,將請求轉發到不同的服務節點上。這裏我們模擬一個服務集羣,將服務啓動兩次:
java -jar provider-0.0.1-SNAPSHOT.jar --server.port=1114
java -jar provider-0.0.1-SNAPSHOT.jar --server.port=1115
最終有兩個服務節點:192.168.3.2:1114
、192.168.3.2:1115
。
niginx 默認的負載均衡策略是輪詢
,將請求輪流分發到不同服務器;還有權重+輪詢
,就是增加了不同服務器被輪詢到的概率;最後是iphash
,對客戶端請求的ip進行hash操作,根據hash結果將客戶端請求分發給同一臺服務器處理,也可以一定程度上解決session不共享的問題,但不常用。
然後配置 nginx, 核心就是upstream
指令:
# 配置集羣中各個服務地址,給它們起一個統一的名字 provider
upstream provider {
server 192.168.3.2:1114;
server 192.168.3.2:1115;
}
server {
listen 8083;
server_name localhost;
location / {
# 使用 provider 代替服務地址
proxy_pass http://provider/;
}
}
重啓 nginx。
當多次請求 http://192.168.2.100:8083/hello 時,請求會輪詢轉發到不同的目標服務上:
2.4、登錄驗證
有時候爲了安全起見,保護數據,在訪問 nginx 代理的資源之前,需要先進行登錄驗證。
首先需要安裝htpasswd
工具,命令如下:
yum install -y httpd-tools
接下來使用 htpasswd 工具來設置登錄的用戶名、密碼,在/usr/local/nginx/conf/
目錄下執行如下命令:
htpasswd -c passwd admin
最終的用戶名、密碼會保存到名爲passwd
的文件中,admin
是登錄的用戶名,執行命令後會提示輸入密碼:
查看 passwd 文件的內容,admin:
後的內容就是加密後的密碼:
關於 htpasswd 更詳細的內容這裏就不介紹了。
生成好了用戶名、密碼,接下來就是修改 nginx 配置文件,在server
模塊添加如下配置:
server {
# 登錄失敗返回的提示信息
auth_basic "Please Login";
# 指定保存用戶名、密碼的文件路徑,這裏使用的是相對路徑,也可以使用絕對路徑 /usr/local/nginx/conf/
auth_basic_user_file passwd;
}
這樣訪問當前站點代理的資源時,就都需要輸入用戶名、密碼了:
也可以只給server
中指定的location
配置auth_basic
、auth_basic_user_file
,這樣只有訪問對應location
配置的資源代理時才需要登錄驗證。
2.5、前後端分離項目部署
在使用前後端分離模式開發項目時,前後項目打包後可以使用 nginx 來代理:
# 配置後端服務地址
upstream myserver {
server 192.168.2.100:8848;
}
server {
listen 8084;
server_name localhost;
location / {
proxy_pass http://myserver/;
proxy_redirect default;
}
location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html) {
# 配置前端打包後的項目路徑
root /opt/software/test4/;
}
}
也是比較簡單的,在root
配置的目錄中存放前端打包好的源碼,upstream
部分配置的是後端服務地址。
作者:SheHuan
鏈接:https://www.jianshu.com/p/bb11f1435f88
來源:簡書
關於如何學習Java,一方面需要不斷的去學習,把基礎知識學紮實,另一方面也要認識到java的學習不能僅僅靠理論,更多的是靠實操,所以要多練習多做項目,在實踐中學習纔是最好的學習方法。很多人剛開始不知道怎麼去學習,這裏我和大部分都來自好朋友整理的一份《JavaCodeHub面試突擊》,裏面包含的內容實在是太全面了,真的很能考察出一名應聘者的成色。
我是終端研發部的小於哥
@終端研發部
面試過很多很多應聘者,說實話, 現在面試要求可真高,雖然工作擰螺絲,但面試還是造火箭的。很多東西我們不光要會用,也要懂其原理。在戰術上一定要重視,方能百戰不殆!如果有幫助,歡迎點贊!