Nginx入門學習
- 2020 年 6 月 17 日
- 筆記
簡介
nginx 是HTTP和反向代理伺服器,郵件代理伺服器和通用TCP/UDP代理伺服器。總之一句話,nginx很火很牛逼就對了。
download
下載地址://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 //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 //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;
}
}
然後訪問 //localhost/report.html
,就可以看到下面這麼高大上的介面了。
SSL
如果你有域名的話,只需要兩行命令可以快速把你的 //域名 變成 //域名。
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講
個人部落格網址: //colablog.cn/
如果我的文章幫助到您,可以關注我的微信公眾號,第一時間分享文章給您