1. 程式人生 > 遊戲攻略 >《鬼谷八荒攻略》洪荒難度定氣拳刮痧Build參考

《鬼谷八荒攻略》洪荒難度定氣拳刮痧Build參考

目錄

1. nginx簡介

Nginx是一款基於非同步框架的輕量級/高效能的Web伺服器/反向代理伺服器/快取伺服器/電子郵件代理伺服器,並在BSD-like協議下發行。由俄羅斯程式設計師Igor Sysoev所開發,最初供俄國大型網站Rambler.ru

及搜尋引擎Rambler使用。

Nginx特點:

優點:

  • 高併發
  • 記憶體消耗少
  • 簡單穩定
  • 支援Rwrite重寫規則
  • 低成本
  • 支援多系統

缺點:

  • 動態處理差
  • rewrite弱

2. Nginx常用命令小記

常用命令:

# ubuntu使用ssh連線伺服器:
ssh [email protected]: # 然後按提示輸入密碼

# 安裝nginx
sudo apt install nginx
# 檢視nginx版本:
nginx -v
# 檢視是否處於執行狀態
ps jx |grep nginx
# 關閉nginx服務
service nginx stop
# 開啟nginx服務
service nginx start
# nginx配置檔案目錄:/etc/nginx/
# nginx的log日誌目錄: /var/log/nginx/
# nginx預設首頁目錄: /usr/share/nginx/html/index.html
# 檢視nginx是否成功
# 測試nginx配置是否正確:
nginx -t
# 重新載入配置資訊
nginx -s reload

Nginx配置圖解:

image-20210508182958183

3. VScode遠端連線虛擬機器上的ubuntu系統

sudo apt install openssh-server
# 修改配置允許遠端連線
cd /etc/ssh/
sodu vim sshd_config

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-fAD3HeDx-1620542439365)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210508181026750.png)]

PermitRootlogin 取消註釋並確保為yes

4. location中的常見動作

4.1 nginx匹配路徑後斜槓問題

當location /path 後面不加斜槓時,訪問時無論請求加不加斜槓請求都能夠被匹配到。如:

location /a {
     return 400;
}

請求路徑最後加不加斜槓都能匹配到。

如果加了斜槓後,訪問時加斜槓才能被匹配到,不加斜槓不會被匹配到。

4.2 try_files和return的使用和區別

location / {
try_files $uri $uri/ =401;
}

try_files不能匹配根路徑,如上面這種配置訪問不會出現401。下面的這種可以訪問。

location /a {
try_files $uri $uri/ =401;
}

try_files配合@使用

location /a {
try_files $uri $uri/ @project
}
location @project {
return 402;
}

return 的使用跳轉

location / {
return 302 http://www.baidu.com;
}

4.3 rootalias的區別:

針對根路徑:

location / {
    root /etc/nginx/html;
    # 指定返回的首頁檔案(預設返回index.html檔案)
    # index index.html
    index 指定的.html檔案
}

# 如果使用root可以匹配,如果不是root,則匹配不了,如果是alias,需要增加斜槓結尾。

location / {
  alias /etc/nginx/html/;
}

針對子路徑的話:root屬性在子路徑下不能使用(404),應該使用alias屬性

location /a {
     alias /etc/nginx/html;
     # 指定
}

4.4 訪問控制

location / {
    stub_stutas on; # 返回nginx狀態資訊
    allow 10.212.12.34; # 指定哪些ip可以訪問
    deny all; # 除了允許的,其他都拒絕。
}

4.5 目錄下載功能

location /download {
    alias /etc/nginx; # 指定下載目錄
    autoindex on; # 開啟下載模式
}

5. 反向代理

正向代理轉發:將客戶端的資訊進行了隱藏

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-R9YSLI8y-1620542439375)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210509100155797.png)]

反向代理轉發:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-yVl1D2r3-1620542439380)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210509100303240.png)]

反向代理的是伺服器端,可以隱藏伺服器端的資訊。

server{
    listen 10.211.23.29:80;
    location / {
        proxy_pass http://10.211.23.29:8000;# 轉發給8000埠
    }
}

server{
    listen 10.211.23.29:8000; # 由8000埠重新進行操作。
    location / {
        root /etc/nginx/html;
        index. index.html;
    }
}

6. 負載均衡

當多次請求時,將比較均衡地轉發給upsteam my_project中的地址

# 負載均衡
upsteam my_project {
    # 預設輪訓
    server 10.211.23.29:8000;
    server 10.211.23.29:8001;
    server 10.211.23.29:8002;
    # 加權輪訓
    server 10.211.23.29:8000 weight=1;
    server 10.211.23.29:8001 weight=2;
    server 10.211.23.29:8002 weight=3;
    # ip_hash 第一次請求會分配一個伺服器端的ip,以後的所有請求都是使用第一的服務ip
    ip_hash;
    server 10.211.23.29:8000;
    server 10.211.23.29:8001;
    server 10.211.23.29:8002;
    
}
# 反向代理
server {
   listen 10.211.23.29:80;
   location / {
      proxy_pass http://my_project
   }
}

server {
   listen 10.211.23.29:8000;
   
   location / {
        root /etc/nginx/html;
        index 8000.html;
   }
}
server {
   listen 10.211.23.29:8000;
   
   location / {
        root /etc/nginx/html;
        index 8001.html;
   }
}
server {
   listen 10.211.23.29:8000;
   
   location / {
        root /etc/nginx/html;
        index 8002.html;
   }
}

7. 日誌解析

日誌功能簡介

日誌簡介

Nginx預設提供了兩個日誌檔案 access.logerror.log,通過access.log可以得到使用者請求的相關資訊;通過error.log可以獲取某個web服務故障或其效能瓶頸等資訊。

而且nginx的日誌支援定製化格式,這樣我們就可以根據實際的業務情況更好的高效工作。最常見的場景就是獲取客戶端的IP,記錄使用者訪問量。

官方介紹:http://nginx.org/en/docs/http/ngx_http_log_module.html

基本配置

# cat /etc/nginx/nginx.conf -n
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

注意:

nginx日誌屬性設定的完整格式是:

​ 屬性名稱 access_log

​ 儲存位置 /var/log/nginx/access.log

​ 日誌格式 位置為空表示使用預設的combined 日誌格式。它是通過log_format設定的

預設日誌格式

log_format combined '$remote_addr - $remote_user [$time_local] '

                    '"$request" $status $body_bytes_sent '

                    '"$http_referer" "$http_user_agent"';

注意:log_format是有一批nginx內建變數組合而成的。

日誌樣式:

\# tail /var/log/nginx/access.log

192.168.8.14 - - [12/Nov/2018:08:24:18 -0800] "GET /favicon.ico HTTP/1.0" 404 580 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 

**nginx常用內建變數 **

nginx常用的內建變數主要是用來分析日誌中的http記錄的,我們可以根據內建的變數精確的獲取相關的資訊

# 預設變數
$remote_addr    前一臺主機的ip地址,不一定是真實的客戶端IP
$remote_user    用於記錄遠端客戶端的使用者名稱稱(一般為“-”)
$time_local    用於記錄訪問時間和時區
$request      用於記錄請求的url以及請求方法
$status      響應狀態碼,例如:200成功、404頁面找不到等。
$body_bytes_sent  給客戶端傳送的檔案主體內容位元組數
$http_referer   可以記錄使用者是從哪個連結訪問過來的
$http_user_agent  使用者所使用的代理(一般為瀏覽器)

其他常用變數
$request_uri    包含請求引數的原始URI,不包含主機名
$uri        不帶請求引數的當前URI,不包含主機名
$http_x_forwarded_for 可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址
$http_x_real_ip  可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址
$args        這個變數等於請求行中的引數,同$query_string
$host        請求主機頭欄位,否則為伺服器名稱。
$scheme       HTTP方法(如http,https)
$document_uri    與$uri相同
$document_root    當前請求檔案配置檔案中html的根目錄即root值
$request_filename  當前請求的檔案路徑,由root或alias指令與URI請求生成

示例:

例:http://localhost:10086/sswang1/sswang2/test.txt
$host       localhost
$server_port    10086
$request_uri    /sswang1/sswang2/test.txt
$document_uri   /sswang1/sswang2/test.txt
$document_root   /var/www/html
$request_filename /var/www/html/sswang1/sswang2/test.txt

自定義日誌實踐

需求:

基於代理方式訪問app1應用,日誌存放在/var/logs/nginx/app1/access.log,要求能從日誌中獲取客戶端的IP地址

因為是獲取代理前面客戶端的真實IP,需要nginx開啟 --with-http_realip_module 功能,使用nginx -V來檢查,ubuntu預設安裝的已經開啟了該功能。

設定日誌格式

~# vim /etc/nginx/nginx.conf
# Logging Settings
## 設定日誌格式的方法: log_format 格式名稱 "日誌表現樣式"
log_format proxy_format '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent "$http_referer"'
                        '"$http_user_agent" "$http_x_real_ip" "$http_x_forwarded_for"';

access_log 日誌路徑 格式名稱;

負載均衡配置檔案

vim /etc/nginx/conf.d/upstream.conf

upstream backends {
 server 192.168.8.14:10086;
}

server {
 listen 80;
 server_name localhost;
 location / {
  proxy_pass http://backends;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

後端代理配置檔案

vim /etc/nginx/conf.d/backend.conf

server {
 listen 192.168.8.14:10086;
 root /var/www/html/app1/;
 access_log /var/log/nginx/app1/access.log proxy_format;
 real_ip_header X-Forwarded-For; 
 set_real_ip_from 192.168.0.0/16; 
 real_ip_recursive on;
 location / {
  try_files $uri $uri/ =404;
 }
}

準備後端服務檔案

mkdir -p /var/www/html/app1/
echo '<h1>backend_app1</h1>' > /var/www/html/app1/index.html
mkdir /var/log/nginx/app1 -p

檢查nginx配置後重載服務

/usr/sbin/nginx -t
systemctl reload nginx
netstat -tnulp | grep nginx

檢視效果

在多臺主機上執行如下命令

curl http://192.168.8.14

檢視日誌:

# app1日誌

192.168.8.1 - - [12/Nov/2018:18:28:46 -0800] "GET / HTTP/1.0" 200 22 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" "192.168.8.1" "192.168.8.1"

192.168.8.14 - - [12/Nov/2018:18:29:30 -0800] "GET / HTTP/1.0" 200 22 "-" "curl/7.47.0" "192.168.8.14" "192.168.8.14"

192.168.8.15 - - [12/Nov/2018:18:31:43 -0800] "GET / HTTP/1.0" 200 22 "-" "curl/7.29.0" "192.168.8.15" "192.168.8.15

注意:因為我們的虛擬機器使用的是nat網路模型,所以我們用外部的宿主機來訪問的話,是通過VMnat8網絡卡IP來訪問nginx代理的,所以記錄的是192.168.8.1

注意:

如果生產中出現了多級代理,

在第一層代理上新增 proxy_set_header X-Real-IP $remote_addr;屬性

在所有代理上必須新增 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;屬性

真實主機上使用 real_ip_header X-Forwarded-For;屬性