Nginx配置入門教程
基本概念
Nginx 最常的用途是提供反向代理服務(wù),那么什么反向代理呢?正向代理相信很多大陸同胞都在這片神奇的土地上用過(guò)了,原理大致如下圖:
代理服務(wù)器作為客戶端這邊的中介接受請(qǐng)求,隱藏掉真實(shí)的客戶,向服務(wù)器獲取資源。如果代理服務(wù)器在長(zhǎng)城外的話還能順便幫助我們實(shí)現(xiàn)翻越長(zhǎng)城的目的。而反向代理顧名思義就是反過(guò)來(lái)代理服務(wù)器作為服務(wù)器的中介,隱藏掉真實(shí)提供服務(wù)的服務(wù)器,原理大致如下圖:
這么做當(dāng)然不是為了實(shí)現(xiàn)翻越長(zhǎng)城,而是為了實(shí)現(xiàn)安全和負(fù)載均衡等一系列的功能。所謂安全指客戶端的請(qǐng)求不會(huì)直接落到內(nèi)網(wǎng)的服務(wù)器上而是通過(guò)代理做了一層轉(zhuǎn)發(fā),在這一層就可以實(shí)現(xiàn)安全過(guò)濾,流控,防 DDOS 等一系列策略。而負(fù)載均衡指我們可以水平擴(kuò)展后端真正提供服務(wù)的服務(wù)器數(shù)量,代理按規(guī)則轉(zhuǎn)發(fā)請(qǐng)求到各個(gè)服務(wù)器,使得各個(gè)服務(wù)器的負(fù)載接近均衡。
而 nginx 就是目前流行的這樣一個(gè)反向代理服務(wù)。
在 Ubuntu 下,可以舍去編譯安裝的過(guò)程,直接 apt-get
sudo apt-get install nginx
安裝好之后可以直接通過(guò):
sudo service nginx start
來(lái)啟動(dòng) nginx 服務(wù),nginx 默認(rèn)設(shè)置了 80 端口的轉(zhuǎn)發(fā),我們可以再瀏覽器訪問(wèn) http://locallhost 來(lái)進(jìn)行檢查。
初始配置
nginx 的默認(rèn)配置文件位于
/etc/nginx/nginx.conf
學(xué)習(xí)配置最好的方式,就是從例子入手,我們先不看其他的配置,直接看和 nginx 默認(rèn)頁(yè)面相關(guān)的配置。在配置文件中有一行:
include /etc/nginx/sites-enabled/*;
這一行加載了一個(gè)外部的配置文件,sites-enabled 文件夾下只有一個(gè) default 文件,這個(gè)外部的配置文件就是負(fù)責(zé)我們 nginx 的默認(rèn)代理。將配置的內(nèi)容縮水后,得到下面幾行:
server {
server_name localhost;
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
一個(gè)大型的網(wǎng)站通常會(huì)有很多下屬的站點(diǎn),有各自的服務(wù)器提供相應(yīng)的服務(wù),在 nginx 中我們可以通過(guò)一個(gè)叫虛擬主機(jī)的概念來(lái)將這些不同的服務(wù)配置隔離,這就是上面配置中的 server 的含義。舉例來(lái)說(shuō) google 旗下有翻譯和學(xué)術(shù)兩款產(chǎn)品我們就可以在 nginx 的配置文件中配置兩個(gè) server,servername 分別為 translate.google.com 和 scholar.google.com,這樣的話不同的url請(qǐng)求就會(huì)對(duì)應(yīng)到nginx相應(yīng)的設(shè)置,轉(zhuǎn)發(fā)到不同的后端服務(wù)器上。這里的 servername 是和客戶端 http 請(qǐng)求中的 host 行進(jìn)行匹配的。
本例中 server_name 為 localhost,這就是為什么我們可以在瀏覽器通過(guò) localhost 訪問(wèn)到頁(yè)面的配置。下面兩個(gè) listen 分別對(duì)應(yīng)了 ipv4 和 ipv6 下的監(jiān)聽端口如果設(shè)為 8080,那么我們就只能通過(guò) localhost:8080 來(lái)訪問(wèn)到默認(rèn)頁(yè)面了。
default_server 的含義是指如果有其他 http 請(qǐng)求的 host 在 nginx 中不存在設(shè)置的話那么就用這個(gè) server 的配置來(lái)處理。比如我們?nèi)ピL問(wèn) 127.0.0.1 那么也會(huì)落到這個(gè) server 來(lái)處理。
每個(gè) url 請(qǐng)求都會(huì)對(duì)應(yīng)的一個(gè)服務(wù),nginx 進(jìn)行處理轉(zhuǎn)發(fā)或者是本地的一個(gè)文件路徑,或者是其他服務(wù)器的一個(gè)服務(wù)路徑。而這個(gè)路徑的匹配是通過(guò) location 來(lái)進(jìn)行的。我們可以將 server 當(dāng)做對(duì)應(yīng)一個(gè)域名進(jìn)行的配置,而 location 是在一個(gè)域名下對(duì)更精細(xì)的路徑進(jìn)行配置。
在這里 location 匹配 / 開始的所有請(qǐng)求,即 localhost 下的 /xxx 或者 /yyy 都要走下面的配置,除了這種簡(jiǎn)單粗暴的匹配,nginx 也支持正則和完全相等及其他的精細(xì)匹配方式。而tryfiles意思是 nginx會(huì)按照接下來(lái)的順序去訪問(wèn)文件,將第一個(gè)匹配的返回。比如你去請(qǐng)求 localhost/test,他會(huì)去尋找 /test 文件,找不到再去找 /test/ 再找不到就返回一個(gè) 404。此外我們還可以在 location的配置里用 proxypass 實(shí)現(xiàn)反向代理和負(fù)載均衡,不過(guò)這個(gè)最簡(jiǎn)單的配置并沒有涉及
其中 root 是指將本地的一個(gè)文件夾作為所有 url 請(qǐng)求的根路徑。比如用戶請(qǐng)求了一個(gè) localhost/test,那么 nginx 就會(huì)去需找 /usr/share/nginx/html 文件夾下的 test 文件返回。
而 index 就是默認(rèn)的訪問(wèn)頁(yè)面了,當(dāng)我們?cè)L問(wèn) localhost 時(shí),他會(huì)自動(dòng)按順序?qū)ふ?root 文件路徑下的 index.html 和 index.htm 將第一個(gè)找到的結(jié)果返回。
location 進(jìn)階配置
上面的配置只是將用戶的 url 映射到本地的文件,并沒有實(shí)現(xiàn)傳說(shuō)中的反向代理和負(fù)載均衡(當(dāng)然 nginx 做靜態(tài)文件的分發(fā)也是想到的厲害),下面我們就來(lái)進(jìn)一步配置 location 看看怎么實(shí)現(xiàn)。
配置起來(lái)很簡(jiǎn)單比如我要將所有的請(qǐng)求到轉(zhuǎn)移到真正提供服務(wù)的一臺(tái)機(jī)器的 8080 端口,只要這樣:
location / {
proxy_pass 123.34.56.67:8080;
}
這樣所有的請(qǐng)求就都被反向代理到 123.34.56.67 去了。這樣我們反向代理的功能是實(shí)現(xiàn)了,可是就能代理到一臺(tái)服務(wù)器上哪有什么負(fù)載均衡呀?這就要用到 nginx 的 upstream 模塊了。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
server backend4.example.com;
}
location / {
proxy_pass http://backend;
}
我們?cè)?upstream 中指定了一組機(jī)器,并將這個(gè)組命名為 backend,這樣在 proxypass 中只要將請(qǐng)求轉(zhuǎn)移到 backend 這個(gè) upstream 中我們就實(shí)現(xiàn)了在四臺(tái)機(jī)器的反向代理加負(fù)載均衡。其中的 iphash指明了我們均衡的方式是按照用戶的 ip 地址進(jìn)行分配。
要讓配置生效,我們不必重啟 nginx 只需要 reload 配置即可。
sudo service nginx reload
總結(jié)
以上是最簡(jiǎn)單的通過(guò) nginx 實(shí)現(xiàn)靜態(tài)文件轉(zhuǎn)發(fā)、反向代理和負(fù)載均衡的配置。在 nginx 中所有的功能都是通過(guò)模塊來(lái)實(shí)現(xiàn)的,比如當(dāng)我們配置 upstream 時(shí)是對(duì) upstream 模塊,而 server 和 location 是在 http core 模塊,其他的還有流控的 limt 模塊,郵件的 mail 模塊,https 的 ssl 模塊。他們的配置都是類似的可以再 nginx 的模塊文檔中找到詳細(xì)的配置說(shuō)明。
- nginx 基本入門教程
- windows下nginxHTTP服務(wù)器入門教程初級(jí)篇
- Nginx 負(fù)載均衡是什么以及該如何配置
- Nginx優(yōu)化服務(wù)之網(wǎng)頁(yè)壓縮的實(shí)現(xiàn)方法
- nginx優(yōu)化的六點(diǎn)方法
- Nginx解決前端訪問(wèn)資源跨域問(wèn)題的方法詳解
- 解決Nginx 配置 proxy_pass 后 返回404問(wèn)題
- 基于Nginx實(shí)現(xiàn)限制某IP短時(shí)間訪問(wèn)次數(shù)
- Nginx配置并兼容HTTP實(shí)現(xiàn)代碼解析
- Nginx服務(wù)快速入門教程
相關(guān)文章
通過(guò)nginx實(shí)現(xiàn)訪問(wèn)服務(wù)器指定目錄下圖片資源
這篇文章為大家詳細(xì)主要介紹了如何通過(guò)nginx實(shí)現(xiàn)訪問(wèn)服務(wù)器指定目錄下圖片資源,文中通過(guò)圖文進(jìn)行了詳細(xì)的講解,有需要的小伙伴可以了解下2023-10-10解決nginx+uwsgi部署Django的所有問(wèn)題(小結(jié))
本篇文章主要介紹了解決nginx+uwsgi部署Django的所有問(wèn)題(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04詳解Nginx服務(wù)器中HTTP Headers相關(guān)的模塊配置使用
這篇文章主要介紹了詳解Nginx服務(wù)器中HTTP Headers相關(guān)的模塊配置使用,包括ngx_http_headers_module與它的增強(qiáng)版ngx_headers_more的配置使用講解,需要的朋友可以參考下2016-01-01修改Nginx源碼實(shí)現(xiàn)worker進(jìn)程隔離實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了修改Nginx源碼實(shí)現(xiàn)worker進(jìn)程隔離實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10nginx中(13: Permission denied)權(quán)限問(wèn)題的解決辦法
"nginx 13: Permission denied" 錯(cuò)誤通常表示nginx進(jìn)程沒有足夠的權(quán)限來(lái)訪問(wèn)特定的文件或目錄,本文就來(lái)介紹一下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09nginx和Apache配置SSL證書的實(shí)現(xiàn)步驟
SSL證書是一種數(shù)字證書,用于加密在網(wǎng)絡(luò)上發(fā)送的數(shù)據(jù)并保護(hù)敏感信息的安全性,本文主要介紹了nginx和Apache配置SSL證書的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12