nginx入門之基礎配置
阿新 • • 發佈:2020-08-01
1、配置檔案
nginx 的配置檔案是 /etc/nginx/nginx.conf,其目錄結構大致為:
main #全域性配置,對全域性生效 events { #nginx工作模式配置,配置影響 Nginx 伺服器或與使用者的網路連線 } http { #http設定,配置代理,快取,日誌定義等絕大多數功能和第三方模組的配置 .... server { #伺服器主機配置,配置虛擬主機的相關引數,一個 http 塊中可以有多個 server 塊 .... location { # 路由配置server塊可以包含多個location塊,location指令用於匹配uri .... } location path { .... } location otherpath { .... } } server { .... location { .... } } upstream name { # 負載均衡配置 .... } }
配置語法:
- 每條配置以分號結尾;
- 指令快用 {} 將多條指令集合在一起;
- 可以使用 include 語句引進其它配置檔案;
- 使用 # 添加註釋;
- 視同 $ 使用變數;
- 部分指令引數支援正則;
2、典型配置
# 每個指令必須有分號結束 user administrator administrators; #配置使用者或者組,預設為nobody nobody。 worker_processes 2; #允許生成的程序數,預設為1,一般設定和cpu核數一樣 pid /nginx/pid/nginx.pid; #指定nginx程序執行檔案存放地址 #制定日誌路徑,級別。這個設定可以放入全域性塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg error_log log/error.log debug; events { accept_mutex on; #設定網路連線序列化,防止驚群現象發生,預設為on multi_accept on; #設定一個程序是否同時接受多個網路連線,預設為off #use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport worker_connections 1024; #最大連線數,預設為512 } http { include mime.types; #副檔名與檔案型別對映表 default_type application/octet-stream; #預設檔案型別,預設為text/plain #access_log off; #取消服務日誌 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式 access_log log/access.log myFormat; #combined為日誌格式的預設值 sendfile on; #允許sendfile方式傳輸檔案,預設為off,可以在http塊,server塊,location塊。 sendfile_max_chunk 100k; #每個程序每次呼叫傳輸數量不能大於設定的值,預設為0,即不設上限。 keepalive_timeout 65; #連線超時時間,預設為75s,可以在http,server,location塊。 upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; #熱備 } error_page 404 https://www.baidu.com; #錯誤頁 server { keepalive_requests 120; #單連線請求上限次數。 listen 4545; #監聽埠 server_name 127.0.0.1; #監聽地址 location ~*^.+$ { #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。 #root path; #根目錄 #index vv.txt; #設定預設頁 proxy_pass http://mysvr; #請求轉向mysvr 定義的伺服器列表 deny 127.0.0.1; #拒絕的ip allow 172.18.5.54; #允許的ip } } }
2.1、server配置
需要注意 server 裡面的 listen 和 server_name 的用法
- listen 並不是埠,可以使用ip接埠,但是這樣就只能單一的匹配了,所以一般只寫埠;
- 如果listen配置域名加埠,則 server_name 配置無意義;
- server_name 配置域名(ip),支援多個域名;
初學者可能會有疑問,為什麼需要支援多個域名/IP,反正進入到nginx裡面的,肯定是伺服器的IP。
因為
- 一臺伺服器是可以配置多個IP的;
- 一個ip是可以繫結多個域名的;
3、全域性變數
nginx 有一些常用的全域性變數,可以在配置檔案中的任意位置使用
全域性變數 | 描述 |
---|---|
$host | 請求資訊中的HOST,如果沒有,則等於設定的伺服器名,不包含埠 |
$request_method | 客戶端請求型別,GET/POST等 |
$remote_addr | 客戶端IP |
$args | 請求中的引數 |
$arg_PARAMETER | GET請求中變數PARAMETER引數值 如$http_user_agent(Uaer-Agent值) |
$content_length | 請求頭中的 Content-length 欄位 |
$http_user_agent | 客戶端agent資訊 |
$http_cookie | 客戶端cookie資訊 |
$remote_addr | 客戶端的IP地址 |
$remote_port | 客戶端的埠 |
$server_protocol | 請求使用的協議,如HTTP/1.0 |
$server_addr | 伺服器地址 |
$server_name | 伺服器名稱 |
$server_port | 伺服器埠 |
$scheme | HTTP方法(如http、https) |
4、配置代理
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://192.168.54.139;
}
}
上例中,如果請求的ip和埠匹配到,則請求會轉發到 http://192.168.54.139
4.1、反向代理配置
兩個域名指向同一臺nginx伺服器,使用者訪問不同的路徑,顯示不同的內容
server {
listen 8081;
server_name localhost;
location ~ /edu/ {
proxy_pass http://www.baidu.com;
}
location ~ /vod/ {
proxy_pass http://www.qq.com;
}
}
上例中,localhost:8081/edu 和 localhost/8081/vod 請求分別轉達到不同的伺服器
當然,也可以配置多個server
upstream tomcat1{
server 192.168.10.182:80;
}
server {
listen 80;
server_name www.123.com;
location / {
proxy_pass http://tomcat1;
}
}
upstream tomcat1{
server 192.168.10.182:81;
}
server {
listen 80;
server_name www.456.com;
location / {
proxy_pass http://tomcat2;
}
}
上例中,可以修改host檔案實現域名和ip的對映
5、負載均衡
5.1、輪詢
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082;
server 192.168.10.182:8083;
}
server {
listen 80;
server_name www.123.com;
location / {
proxy_pass http://tomcat2;
}
}
輪詢預設權重都是1,伺服器請求的預設順序是123123123
5.2、加權輪詢
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082 weight=2;
server 192.168.10.182:8083;
}
上例中,為一個服務提供了三臺伺服器來實現負載均衡
可根據伺服器的配置情況調整權重,不配置則預設1,權重越低,請求越少。
5.3、熱備
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082 backup;
}
當第一臺伺服器出問題時,啟用第二臺伺服器,順序是1111111,1掛了,22222
5.4、ip_hash
upstream tomcat2 {
server 192.168.10.182:8081;
server 192.168.10.182:8082;
ip_hash;
}
nginx 會讓相同客戶端ip請求相同的伺服器
5.5、其它引數
nginx的負載均衡還有一些其它狀態引數詳解,比如:
- down:表示當前的server暫時不參與負載均衡;
- backup:預留的備份及其,其它非備份及其出現故障或者忙的時候,才會請求備份及其,因此,此及其壓力最輕;
- max_fails:允許請求失敗的次數,預設為1,當超過最大次數時,返回proxy_next_upstream模組定義的錯誤;
- fail_timeout:在經歷了max_fails次失敗之後,暫停服務的時間,max_fails可以和fail_timeout一起使用;
示例:
upstream tomcat2 {
server 192.168.10.182:8081 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.182:8082 weight=1 max_fails=2 fail_timeout=1;
}