Nginx入門學習

Johnson木木發表於2020-06-17

簡介

nginx 是HTTP和反向代理伺服器,郵件代理伺服器和通用TCP/UDP代理伺服器。總之一句話,nginx很火很牛逼就對了。

download

下載地址:http://nginx.org/en/download.html
mainline:最新版本
stable:穩定版本
下載命令:

wget [下載地址]
tar -zxvf [壓縮包]

目錄介紹

auto:輔助configure檔案的執行
CHANGES:不同版本的特性
conf:示例檔案
configure:用於生成中間檔案,執行編譯前的必須動作
contrib:vim nginx檔案時顯示的樣式,用法 cp contrib/vim/* ~/.vim/
html::nginx的預設html檔案
man:nginx的幫助檔案
src:nginx原始碼

安裝

.configure --xxx

--prefix=PATH nginx安裝目錄的字首
--with-xxx 預設不會編譯進nginx,需要則寫到命令列
--without-xxx 預設編譯進nginx,不需要則寫到命令列

最普通的configure編譯命令為
.configure --prefix=/usr/local/nginx
執行完命令則生成objs目錄,存放中間檔案,objs/ngx_modules.c 檔案決定哪些模組安裝到nginx。

make編譯:make,執行完後生成大量的中間檔案,都會存放到objs/src目錄中。
安裝:make install

Nginx命令列

-c 指定配置檔案
-g 指定配置的指令
-p 指定執行目錄
-s stop 立刻停止服務; quit 優雅的停止服務;reload 過載配置檔案;reopen 重新開始記錄日誌檔案
-t 測試配置檔案語法是否有錯誤
-v 版本資訊

過載配置檔案

修改nginx配置檔案的內容後,需要nginx重新載入配置檔案

nginx -s reload

熱部署

nginx正在執行的時候,此時需要升級nginx版本。只需要更新nginx二進位制檔案。
先備份舊的nginx:

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

使用最新的nginx二進位制檔案 替換掉正在使用的nginx二進位制檔案。

cp -r nginx /usr/local/nginx/sbin/ -f

檢視正在執行的nginx的master程式

ps -ef | grep nginx

告訴正在執行nginx的master,需要進行nginx升級

kill -USR2 [正在執行的nginx master程式ID]

執行完命令後會啟動新的nginx程式,然後告知舊的nginx master程式,請優雅的關閉所有舊的worker程式

kill -WINCH [舊的nginx master程式ID]

然後會發現舊的nginx worker程式已經全部關閉,發現master程式還在。如果新的nginx版本發生的錯誤,可以回退到舊的nginx master程式中,執行nginx -s reload會回退到舊版本

日誌切割

# 先把日誌檔案先備份
mv access.log access_bak.log

# 進行日誌切割,執行完命令會重新生成access.log 檔案
nginx -s reopen

一般情況下會後臺做一個bash指令碼,定時進行日誌切割。

靜態資源伺服器

nginx 配置

# 日誌格式,main為日誌格式命名
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"'; 
	
gzip on; # 對檔案進行壓縮傳送
gzip_min_length 1; # 小於 1 位元組則不進行壓縮。
gzip_comp_level 2; # 壓縮級別
gzip_types image/jpeg image/gif; # 對這些檔案才進行壓縮

server {
    listen 80; # 監聽埠
    server_name localhost; # 域名
	
	# 記錄access_log日誌(每一個請求都會記錄), 使用main的log_format進行記錄
	access_log /logs/blog.log main; 

    # url匹配的路徑
    location / { 
	    alias  code/; # 指 nginx的安裝目錄下 eg:/usr/local/nginx/code
	    # autoindex on; # 共享靜態資源
	    # set $limit_rate 10k; # nginx每秒傳輸 10k位元組 到瀏覽器當中
    }
}

具備快取功能的反向代理服務

可以建立多個上游服務,當有請求進來的時候,nginx可以根據負載均衡演算法代理給多臺上游伺服器工作。nginx配置

# 上游服務
# local 為上游伺服器名
upstream local {
     # 其中一臺上游伺服器,可以配置多臺
	 # 127.0.0.1:8080 代表只有本機能訪問8080埠
    server 127.0.0.1:8080; 
}

# 反向代理快取    快取路徑                   記憶體關鍵字,10m
proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g;
inactive=60m use_temp_path=off;

server {
	listen 80;
    server_name colablog.cn; # 域名
	
	# 記錄access_log日誌(每一個請求都會記錄), 使用main的log_format進行記錄
	access_log /logs/blog.log main; 

    # url匹配的路徑
    location / { 
	    # doc http://nginx.org/en/docs/http/ngx_http_proxy_module.html
	    # proxy_set_header 反向代理伺服器把客戶端請求的資訊,設定到請求頭中傳送到上游服務
	    proxy_set_header Host $host; # 域名
		proxy_set_header X-Real-IP $remote_addr; # 客戶端地址
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		
		# 使用哪個快取,對應上面的keys_zone
		proxy_cache my_cache;
		# 快取的路徑
		proxy_cache_key $hots$uri$is_args$args;
		# 對於這些響應不快取
		proxy_cache_valid 200 304 302 1d;
	
	    # 代理到上游服務
	    proxy_pass http://local;
    }
}

GoAccess視覺化實時監控access日誌

安裝

你可以快速使用 apt install或者 yum install,也可以在官網中檢視編譯安裝的方式。
執行goaccess命令

# goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --real-time-html --time=format='%H:%M:%S' --date-format='%d/%b/%Y' --log-format=COMBINED

--real-time-html 代表實時更新頁面

nginx.conf配置檔案

    # 日誌格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    server {
        listen 80;
        server_name: localhost;
        # 日誌記錄
        access_log logs/access.log main;
        
        # 指定頁面
        location /report.html {
            alias /usr/local/nginx/html/report.html;
        }
    }

然後訪問 http://localhost/report.html,就可以看到下面這麼高大上的介面了。
nginxaccesslog.jpg

SSL

如果你有域名的話,只需要兩行命令可以快速把你的 http://域名 變成 https://域名
ubuntu版本下

apt install python-certbot-nginx

centos版本下

yum install python2-certbot-nginx

使用certbot命令幫我們下載證照和自動配置好nginx.conf,

certbot --nginx --nginx-server-root=/usr/local/nginx/conf/ -d [你的域名]

執行了上面的命令後會有兩個選項,第一個選項是可以訪問http或者https,不會進行重定向;而第二個選項則是訪問http的時候重定向到https中。
就這樣就搞定了,是不是很簡單。

總結

Nginx初次入門的小白,文章若有錯誤的地方,請用力的指出。

參考文章:極客時間:Nginx核心知識100講

個人部落格網址: https://colablog.cn/

如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您
微信公眾號