1 nginx的核心功能及應用場景
- 靜態資源服務器(靜態網站、靜態資源訪問)
- 檔案服務器(搭配fastDFS可以搭建分布式檔案服務器)
- 虛擬主機
- 請求轉發
- 反向代理
- 負載均衡
- URl請求rewrite
- 軟防火墻
- …
2 nginx安裝設定的核心組態檔及相關服務操作命令
2.1 檔案上傳下載命令:
# 從本地拷貝檔案到遠程服務器[需要指定拷貝的目的地檔案直接在路徑后面再跟上檔案的名稱就可以]
scp nginx-1.20.1.tar.gz root@116.64.151.39:/opt/packages
# 從遠程服務器拷貝檔案到本地[需要指定拷貝的目的地檔案直接在路徑后面再跟上檔案的名稱就可以]
scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3
# 拷貝檔案夾
scp -r www.runoob.com:/home/root/others/ /home/space/music/
**注意:**這個scp命令只能在linux系統下可以使用,一般都是安裝了linux作業系統的堡壘機或跳板機中使用,如果是windows,可以直接借助ftp客戶端工具進行檔案上傳下載
2.2 檔案解壓縮命令
# 檔案解壓縮命令
tar -zxf nginx-1.20.1.tar.gz
2.3 安裝命令
# 編譯命令[需要進入到nginx-1.20.1.tar.gz解壓檔案的根目錄下,configure可執行檔案在根目錄下]
./configure --prefix=/usr/local/software/nginx --error-log-path=/usr/local/software/nginx/logs/error.log --http-log-path=/usr/local/software/nginx/logs/access.log --with-http_gzip_static_module --http-client-body-temp-path=/usr/local/software/nginx/client --http-proxy-temp-path=/usr/local/software/nginx/proxy --http-fastcgi-temp-path=/usr/local/software/nginx/fastcgi --http-uwsgi-temp-path=/usr/local/software/nginx/uwsgi --http-scgi-temp-path=/usr/local/software/nginx/scgi --with-http_stub_status_module --with-http_ssl_module
# 編譯命令
make
# 安裝命令
make install
2.4 nignx啟動、退出、重新加載組態檔的命令
需要先進入安裝好的目錄/usr/local/nginx/sbin【因為這里暫時還沒有配置環境變數】
# 沒有配置環境變數需要先進入到nginx的安裝目錄下的sbin目錄進行服務的啟動
#【默認nginx.conf啟動】
./nginx
#【指定組態檔啟動】
./nginx -c conf/nginx.conf
#【快速停止nginx服務】
./nginx -s stop
#【優雅關閉,在退出前完成已經接受的連接請求】
./nginx -s quit
#【重新加載配置】
./nginx -s reload 重新加載配置
2.5 nignx加入系統服務的關鍵組態檔
需要在/usr/lib/systemd/system目錄下創建一個組態檔nginx.service,添加內容如下:
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/software/nginx/logs/nginx.pid
ExecStartPre=/usr/local/software/nginx/sbin/nginx -t -c /usr/local/software/nginx/conf/nginx.conf
ExecStart=/usr/local/software/nginx/sbin/nginx -c /usr/local/software/nginx/conf/nginx.conf
ExecReload=/usr/local/software/nginx/sbin/nginx -s reload
ExecStop=/usr/local/software/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/software/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2.6 重新加載系統服務命令
systemctl daemon-reload
2.6 通過系統服務設定開機自啟以及手動啟動、重啟、停止NGINX服務命令
# 啟動nginx
systemctl start nginx
systemctl start nginx.service
# 重啟nginx
systemctl restart nginx
systemctl restart nginx.service
# 停止nginx
systemctl stop nginx
systemctl stop nginx.service
# 查看nginx的運行狀態
systemctl status nginx.service
systemctl status nginx.service -l
2.7 加入或取消開機啟動
# 設定成開機自啟動
systemctl enable nginx.service
# 關閉開機自啟動
systemctl disable nginx.service

2.8 防火墻相關命令
# 添加開放埠
firewall-cmd --zone=public --add-port=9000/tcp --permanent
# 查詢所有開放埠串列
firewall-cmd --list-ports
# 移除開放埠
firewall-cmd --zone=public --remove-port=9000/tcp --permanent
# 重新加載防火墻規則
firewall-cmd --reload
# 啟動防火墻
systemctl start firewalld.service
# 重啟防火墻
systemctl restart firewalld.service
# 關閉防火墻
systemctl stop firewalld.service
# 查看防火墻的運行狀態
systemctl status firewalld.service
systemctl status firewalld.service -l
安裝好nginx之后,修改組態檔下的server中監聽的埠為一個未被占用的埠,重新啟動nginx,通過i瀏覽器訪問http://服務器IP:埠【這里服務器IP就是安裝了nginx服務的機器的ip地址,如果是云服務器就是這臺機器的公網IP,埠就是剛才修改的組態檔的監聽埠】

如上圖,則nginx的環境就搭建好了,下面就可以來玩一玩一些比較常見的配置操作了
3 nginx常用配置
nginx的核心配置都是在安裝目錄下的conf/nginx.conf檔案中進行配置的
3.1 偵聽埠
server {
# 標準HTTP協議
listen 80;
# 標準HTTPS協議
listen 443 ssl;
# HTTP2
listen 443 ssl http2;
# 使用IPv6偵聽80埠
listen [::]:80;
# 只使用IPv6偵聽80埠
listen [::]:80 ipv6only=on;
}
3.2 訪問日志配置
server {
# 相對或者絕對的日志檔案路徑【這里注意如果使用相對路徑的起始路徑默認是nginx的安裝目錄】
access_log /path/to/file.log;
# 是否開啟訪問日志【默認是開啟的】
access_log on;
}
3.3 監聽的IP或者域名配置
server {
# 主機IP或者域名
server_name mydomain.com;
# 監聽多個IP或者域名時,使用空格進行分隔
# server_name mydomain.com www.mydomain.com;
# 監聽所有的域
server_name *.mydomain.com;
# 監聽所有的頂級域名
server_name mydomain.*;
# Listen to unspecified Hostnames (Listens to IP address itself)
server_name "";
}
3.4 靜態資源訪問配置
server {
listen 80;
server_name mydomain.com;
location / {
// 網站的靜態資源的訪問的根目錄在服務器上面的存放路徑
root /path/to/website;
}
}
3.5 請求重定向
server {
listen 80;
server_name www.mydoamin.com;
# 當請求當前網站首頁時,將請求重定向到下面這個請求路徑上
return 301 http://mydoamin.com$request_uri;
}
server {
listen 80;
server_name www.mydoamin.com;
# 當請求網站指定的請求路徑時,將請求重定向到下面這個請求路徑上
location /redirect-url {
return 301 http://otherdomain.com;
}
}
3.6 反向代理
nginx的反向代理配置通過proxy_pass進行配置
server {
listen 80;
server_name mydomain.com;
# 下面這個location配置的含義就是主機下的80埠是,會將所有的請求的代理到 http://0.0.0.0:10000下進行處理
location / {
proxy_pass http://0.0.0.0:10000;
}
}
反向代理存在一個問題就是會默認代理重定向,導致服務端如果想要獲取請求端的請求頭資料資訊無法獲取,這時需要作如下配置,關閉代理重定向,設定代理請求頭
server {
listen 80;
server_name mydomain.com;
# 下面這個location配置的含義就是主機下的80埠是,會將所有的請求的代理到 http://0.0.0.0:10000下進行處理
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://0.0.0.0:10000;
}
}
3.7 負載均衡
# 負載均衡的組態檔下發如下: 定義一個app_request變數[可以任意命名,但是不能使用組態檔的關鍵字]代理多個服務端
upstream app_request {
server 0.0.0.0:10000;
server 0.0.0.0:10001;
server 116.131.73.102:8080;
}
server {
listen 80;
server_name mydomian.com;
location / {
# 配置了負載均衡之后,這里不能再使用某個后端服務,而是需要使用 負載均衡配置中使用的app_request變數,切記
proxy_pass http://app_request ;
}
}
3.7 負載均衡權重配置【默認輪詢】
##### **weight(權重)**
# 指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況,
upstream httpds {
# down:表示當前的server暫時不參與負載
server 127.0.0.1:8050 weight=10 down;
# weight:默認為1.weight越大,負載的權重就越大,
server 127.0.0.1:8060 weight=1;
# backup: 其它所有的非backup機器down或者忙的時候,請求backup機器
server 127.0.0.1:8060 weight=1 backup;
}
3.9 SSL協議配置
server {
# https協議默認使用443埠
listen 443 ssl;
# 偵聽域名
server_name mydomain.com;
# 開啟ssl協議
ssl on;
# 證書所在路徑【一般就放在組態檔nginx.conf同級目錄,其他自定義位置也可以】
ssl_certificate /path/to/cert.pem;
# 私鑰所在路徑【一般就放在組態檔nginx.conf同級目錄,其他自定義位置也可以】
ssl_certificate_key /path/to/privatekey.pem;
ssl_stapling on;
ssl_stapling_verify on;
# 中間證書所在路徑【中間證書,這個可以自己生成,具體操作可以參考我另外一篇博客https://blog.csdn.net/qq_41865652/article/details/116048879】
ssl_trusted_certificate /path/to/fullchain.pem;
# ssl協議版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl協議超時時間
ssl_session_timeout 1h;
# sslsession快取大小
ssl_session_cache shared:SSL:50m;
# ssl安全創術請求請求頭過期時間
add_header Strict-Transport-Security max-age=15768000;
}
# http永久重定向到https配置如下
server
{
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
3.10 URL重寫
rewrite <regex> <replacement> [flag];
關鍵字 正則運算式 替代內容 flag標記
- 關鍵字:其中關鍵字error_log不能改變
- 正則:perl兼容正則運算式陳述句進行規則匹配
- 替代內容:將正則匹配的內容替換成replacement
- flag標記:rewrite支持的flag標記
rewrite引數的標簽段位置【rewrite可以定義在server中、location中、if判斷中】:
- server
- location
- if
flag標記說明:
- last #本條規則匹配完成后,繼續向下匹配新的location URI規則
- break #本條規則匹配完成即終止,不再匹配后面的任何規則
- redirect #回傳302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址
- permanent #回傳301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址
# 當請求/shop/details?shopId=1時,將請求重寫成/shop/details/1.html
rewrite ^/shop/details/1.html$ /shop/details?shopId=1 last;
# 當請求/shop/details?shopId=*時,將請求重寫成/shop/details/*.html
rewrite ^/shop/details/(.+).html$ /shop/details?shopId=$1 last;
4 nginx組態檔中的location項
增加每一個location
location /css {
# root用來設定根目錄,而alias在接受請求的時候在路徑上不會加上location
# 使用root的寫法
root /usr/local/nginx/static;
# 使用alias的寫法
# alias /usr/local/nginx/static/css;
}
location /images {
root /usr/local/nginx/static;
# 使用alias的寫法
# alias /usr/local/nginx/static/images;
}
location /js {
root /usr/local/nginx/static;
# 使用alias的寫法
# alias /usr/local/nginx/static/js;
}
使用一個location
使用正則
location 前綴
沒有前綴 匹配以指定模式開頭的location
= 精準匹配,不是以指定模式開頭
~ 正則匹配,區分大小寫
~* 正則匹配,不區分大小寫
^~ 非正則匹配,匹配以指定模式開頭的location
location匹配順序
-
多個正則location直接按書寫順序匹配,成功后就不會繼續往后面匹配
-
普通(非正則)location會一直往下,直到找到匹配度最高的(最大前綴匹配)
-
當普通location與正則location同時存在,如果正則匹配成功,則不會再執行普通匹配
-
所有型別location存在時,“=”匹配 > “^~”匹配 > 正則匹配 > 普通(最大前綴匹配)
location ~*/(css|images|js) { root /usr/local/nginx/static; index index.html index.htm; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325539.html
標籤:其他
上一篇:計算機網路第2章(物理層)
