nginx 伺服器配置
前置工作
安裝必要程式
yum -y install gcc gcc-c++ autoconf pcre-devel make automake
yum -y install wget httpd-tools vim
複製程式碼
配置 yum 源
vim /etc/yum.repos.d/nginx.repo
# 將以下內容新增進去
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ #OS和OSRELEASE 根據自己的系統和版本號填寫 如 /centos/7
gpgcheck=0
enabled=1
# 開始安裝
yum install nginx
# 檢查是否安裝成功
nginx -v
複製程式碼
檢視 nginx 安裝目錄
rpm -ql nginx
檢視 nginx 的總配置檔案
vim /etc/nginx/nginx.conf
nginx 服務的啟動與停止
- 啟動方式
- nginx 直接啟動
- systemctl start nginx.service
- 檢視是否啟動
ps aux | grep nginx
- 停止方式
- nginx -s stop 立即停止
- nginx -s quit 從容停止
- killall nginx 直接殺死
- systemctl stop nginx.service
- 重啟服務
- systemctl restart nginx.service
- 重新載入配置檔案
- nginx -s reload
- 檢視埠號佔用情況
- netstat -tlnp
nginx 的配置檔案
配置入口
vim /etc/nginx/conf.d/default.conf
vim /etc/nginx/nginx.conf
配置跨域支援
vim /etc/nginx/nginx.conf
# 加入以下程式碼
http {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
...
}
複製程式碼
配置協商快取
- etag on; //開啟 etag 驗證
- expires 7d; //設定快取過期時間為 7 天
在伺服器上開啟 Gzip 傳輸壓縮
- gzip on;
- gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
訪問許可權的控制
location / {
allow 12.34.567.890;
deny all;
}
複製程式碼
上述配置表示只允許 IP 為12.34.567.890 的主機進行訪問。
location = /admin {
deny all;
}
複製程式碼
= 根據其模式後進行精確匹配 ~ 後面跟正則匹配符(~指區分大小寫的正則匹配,~*指不區分大小寫的正則匹配) @ 內部訪問符,一般用於錯誤頁面
location ~ \.php$ {
deny all;
}
複製程式碼
禁止訪問所有 php 頁面
基於埠號配置虛擬主機
原理
nginx 監聽多個埠,根據不同的埠號,來區分不同的網站。
配置地方
- 可以在主配置檔案
/etc/nginx/nginx.conf
- 也可以在
/etc/nginx/conf.d/default.conf
- 還可以在 conf.d 資料夾下新建一個配置檔案
# 新建一個 server,監聽8081,此時有兩個
server {
listen 8081;
server_name localhost;
root /usr/share/nginx/html/html8081;
index index.html;
}
複製程式碼
此時在瀏覽器訪問 80 和 8081 埠,看到結果不同。
基於 IP 配置虛擬主機
與上面類似,這次改 IP;
server {
listen 80;
server_name 94.191.37.216;
root /usr/share/nginx/html/html8001;
index index.html;
}
複製程式碼
配置以域名為劃分的虛擬主機(主要更改 server_name)
- default.conf
server {
listen 80;
server_name silence-jk.club;
...
}
複製程式碼
- com.conf
server {
listen 80;
server_name silence-jk.com;
location / {
root /usr/share/nginx/html/dist;
index index.html index.htm;
}
}
複製程式碼
正向代理與反向代理
- 正向代理:給客戶端做代理,訪問客戶端不能訪問的頁面
- 反向代理:給服務端做代理,收到客戶請求後給客戶端返回服務端設定好的內容(服務端想給客戶端返回的)
反向代理演示
- 修改配置檔案
server {
listen 80;
server_name silence-jk.club;
location / {
proxy_pass http://silence-jk.com; # 反向代理
}
}
複製程式碼
其他反向代理指令
proxy_set_header :在將客戶端請求傳送給後端伺服器之前,更改來自客戶端的請求頭資訊。
proxy_connect_timeout:配置Nginx與後端代理伺服器嘗試建立連線的超時時間。
proxy_read_timeout : 配置Nginx向後端伺服器組發出read請求後,等待相應的超時時間。
proxy_send_timeout:配置Nginx向後端伺服器組發出write請求後,等待相應的超時時間。
proxy_redirect :用於修改後端伺服器返回的響應頭中的Location和Refresh。
複製程式碼
nginx 適配 PC 或移動裝置
內建變數 $http_user_agent
可獲取客戶端 userAgent 來判斷是 PC 還是移動端
操作步驟
- 進入
/usr/share/nginx/
- 建立 pc 和 mobile 兩個資料夾用來存放 pc 和 移動端頁面
- 進入
/etc/nginx/conf.d/default.conf
新增以下內容
server{
...
location / {
root /usr/share/nginx/pc;
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
root /usr/share/nginx/mobile;
}
index index.html;
}
}
複製程式碼