文章目錄
- 1 nginx簡介
- 2 nginx主要功能概述
- 2.1 正向代理與反向代理
- 2.1.1 正向代理
- 2.1.2 反向代理
- 2.2 負載均衡
- 2.3 動靜分離
- 3 nginx常用命令
- 4 nginx組態檔
- 4.1 組態檔位置
- 4.2 組態檔的組成
- 4.2.1 全域塊
- 4.2.2 events塊
- 4.2.3 http塊
- 4.2.3.1 http全域塊
- 4.2.3.2 server塊
- 4.2.3.2.1 全域server
- 4.2.3.2.2 location
- 5 nginx反向代理配置實戰
- 5.1 最簡單的方向代理
- 5.2 不同url分發到不同服務器
- 6 nginx負載均衡配置實戰
- 6.1 輪詢
- 6.2 權重
- 6.3 ip_hash
- 6.4 fair
- 7 nginx動靜分離配置實戰
- 7.1 準備靜態資源
- 7.2 修改組態檔
- 8 nginx配置高可用集群
- 8 nginx原理
環境介紹:
Ubantu 20.04
nginx 18.1
如果你的ubantu沒有安裝nginx,那么使用下面的命令安裝:
sudo apt install nginx
稍等片刻,檢查是否安裝成功
zjf@ubuntu:~/Desktop$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
# 有輸出版本號說明安裝成功
zjf@ubuntu:~/Desktop$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
Active: active (running) since Sun 2021-10-03 19:22:12 CST; 49min ago
Docs: man:nginx(8)
Main PID: 6749 (nginx)
Tasks: 3 (limit: 9443)
Memory: 3.7M
CGroup: /system.slice/nginx.service
├─6749 nginx: master process /usr/sbin/nginx -g daemon on; master_>
├─6750 nginx: worker process
└─6751 nginx: worker process
1 nginx簡介
nginx是C語言寫的web服務器,占用記憶體小,占用記憶體小,具有高并發,高可靠性,常用功能主要有:反向代理;動靜分離;負載均衡
2 nginx主要功能概述
2.1 正向代理與反向代理
2.1.1 正向代理
在客戶端配置代理服務器,通過代理服務器與實際服務器進行通訊

2.1.2 反向代理
客戶端對代理是無感知的,客戶端不需要做任何配置都可以訪問,將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器是一個服務器,暴露的是代理服務器,隱藏的是真實服務器,

2.2 負載均衡
當單臺服務器達到性能瓶頸的時候,需要增加多臺服務器,負載均衡顧名思義就是把請求平均分發到不同的服務器,

2.3 動靜分離
為了加快網站的決議速度,把動態頁面和靜態頁面由不同的服務器來決議,加快決議速度,降低單個服務器的壓力

3 nginx常用命令
切換到/usr/sbin目錄,可以使用nginx命令
zjf@ubuntu:~/Desktop$ whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
zjf@ubuntu:~/Desktop$ cd /usr/sbin/
查看版本號
zjf@ubuntu:/usr/sbin$ ./nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
停止nginx
zjf@ubuntu:/usr/sbin$ ./nginx -s stop
啟動nginx
zjf@ubuntu:/usr/sbin$ ./nginx
重新加載組態檔
zjf@ubuntu:/usr/sbin$ ./nginx -s reload
如果權限不夠,再指令前面加sudo,
這不是操作nginx的唯一方式,可以通過docker使用nginx,也可以通過systemctl 操作nginx服務
檢查組態檔
root@ubuntu:/usr/sbin# nginx -tc /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
使用指定組態檔
nginx -c /etc/nginx/nginx.conf
使用指定組態檔重新啟動
nginx -s reload -c /etc/nginx/nginx.conf
4 nginx組態檔
4.1 組態檔位置
nginx的組態檔再/etc/nginx目錄下
zjf@ubuntu:~$ whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
zjf@ubuntu:~$ cd /etc/nginx
zjf@ubuntu:/etc/nginx$ ls
conf.d koi-win nginx.conf sites-enabled
fastcgi.conf mime.types proxy_params snippets
fastcgi_params modules-available scgi_params uwsgi_params
koi-utf modules-enabled sites-available win-utf
4.2 組態檔的組成

4.2.1 全域塊
設定影響nginx服務器整體運行的配置指令,主要包括配置運行nginx服務器的用戶(組)、允許生成的worker process數,行程PID存放路徑、日志存放路徑和型別以及組態檔的引入等,
user www-data;
worker_processes auto; # nginx并發處理的值,越大處理的并發越多
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
4.2.2 events塊
events塊涉及的指令主要影響nginx與用戶的網路鏈接
events {
worker_connections 768; # 每個process允許的鏈接數
# multi_accept on;
}
4.2.3 http塊
這里是nginx配置最頻繁的部分,代理,快取和日志定義等絕大多數功能和第三方模塊的配置都在這里,http塊也包括http全域塊、server塊
4.2.3.1 http全域塊
http {
include mime_type;
}
4.2.3.2 server塊
4.2.3.2.1 全域server
sever {
listen 80;# 當前監聽的埠是80
server_name localhost; # 主機名稱
}
4.2.3.2.2 location
location / { # 當請求的路徑出現斜杠出現下面的跳轉,可以做路徑中包含某個值,執行其他跳轉
root html
index index.html index.htm
}
5 nginx反向代理配置實戰
5.1 最簡單的方向代理
瀏覽器訪問192.168.153.128:81請求就會被重定向到百度首頁
http{
# http全域塊-其他內容
server {
listen 81;
server_name 192.168.153.128;
location ~/* {
proxy_pass http://www.baidu.com;
}
}
# http其他內容
}
5.2 不同url分發到不同服務器
請求中有淘寶發送到www.taobao.com
請求中有百度發送到www.baidu.com
server {
listen 81;
server_name 192.168.153.128;
location ~/baidu/* {
proxy_pass http://www.baidu.com;
}
location ~/taobao/* {
proxy_pass http://www.taobao.com;
}
}
6 nginx負載均衡配置實戰
nginx負載均衡常用的四種策略,分別是輪詢(默認策略)、權重、ip_hash,fair(回應時間方式)
做配置之前先準備兩個服務,如果你是java開發,那么建議啟動兩個tomcat服務,本篇檔案使用python的web服務,flask+gunicorn做為服務
首先準備兩個flask程式
app1.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello gunicorn web 1; open 5000 port"
第二個flask程式
app2.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello gunicorn web 2; open 5001 port"
使用gunicorn 運行服務
gunicorn -w 2 -b 0.0.0.0:5000 -D app1:app
gunicorn -w 2 -b 0.0.0.0:5001 -D app2:app
通過瀏覽器訪問ip:5000 和 ip:5001會看到定義的回傳值
6.1 輪詢
upstream myserver {
server 192.168.153.128:5000;
server 192.168.153.128:5001;
}
server {
listen 81;
server_name 192.168.153.128;
location ~/* {
proxy_pass http://myserver;
}
}
訪問192.168.153.128:81會依次代理到5000埠與5001埠
6.2 權重
upstream myserver {
server 192.168.153.128:5000 weight=5;
server 192.168.153.128:5001 weight=10;
}
server {
listen 81;
server_name 192.168.153.128;
location ~/* {
proxy_pass http://myserver;
}
}
訪問192.168.153.128:81 代理到5000埠 5001埠,平均下:5001埠被訪問兩次,5000埠被訪問一次
6.3 ip_hash
upstream myserver {
ip_hash;
server 192.168.153.128:5000;
server 192.168.153.128:5001;
}
server {
listen 81;
server_name 192.168.153.128;
location ~/* {
proxy_pass http://myserver;
}
}
根據訪問的ip訪問到不同的服務器,可以解決session共享問題
6.4 fair
upstream myserver {
server 192.168.153.128:5000;
server 192.168.153.128:5001;
fair;
}
server {
listen 81;
server_name 192.168.153.128;
location ~/* {
proxy_pass http://myserver;
}
}
7 nginx動靜分離配置實戰
7.1 準備靜態資源

在/home/zjf/Desktop/test目錄下創建一個image檔案夾放一些圖片
7.2 修改組態檔
server {
listen 81;
server_name 192.168.153.128;
location /image/ {
root /home/zjf/Desktop/test/; # 指向靜態目錄
autoindex on; # 顯示檔案夾內的檔案
}
}

實作了動靜分離
8 nginx配置高可用集群

需要兩臺服務器
每臺服務器需要keepalived
yum 命令安裝keepalived: yum install keepalived -y
8 nginx原理
nginx有一個master行程和一個worker行程
root@ubuntu:/home/zjf/Desktop/test# ps -ef |grep nginx
root 6385 1501 0 08:58 ? 00:00:00 nginx: master process nginx -c /etc/nginx/nginx.conf
www-data 11000 6385 0 10:15 ? 00:00:00 nginx: worker process
master負責管理與監控,一個master管理多個worker,客戶端發送請求先到達master,多個worker使用爭搶策略獲取請求并處理,每個worker是一個單獨的行程
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/305645.html
標籤:其他
