Nginx 學習筆記

Silence-jk發表於2018-11-02

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;
  }
}
複製程式碼

參考資料

一個前端必會的 Nginx免費教程

相關文章