簡介
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
,就可以看到下面這麼高大上的介面了。
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/
如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您