Nginx超詳細入門!

本文介紹基於 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:1114192.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_basicauth_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面試突擊》,裏面包含的內容實在是太全面了,真的很能考察出一名應聘者的成色。

JavaCodeHub

我是終端研發部的小於哥
@終端研發部
面試過很多很多應聘者,說實話, 現在面試要求可真高,雖然工作擰螺絲,但面試還是造火箭的。很多東西我們不光要會用,也要懂其原理。在戰術上一定要重視,方能百戰不殆!如果有幫助,歡迎點贊!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章