nginx學習

什麼是nginx?

<img src="https://www.lzmvlog.top/upload/2021/01/e7cd7b899e510fb30f2466c67079df95d143ad4ba602-b4127e5112344419801dba72d70d61e6.png" alt="e7cd7b899e510fb30f2466c67079df95d143ad4ba602" style="zoom:25%;" />html

Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力在同類型的網頁服務器中表現較好

nginx安裝

一、手動安裝

#安裝 nginx 
$ yum install nginx

#啓動nginx
$ systemctl start nginx

#加入開機啓動
$ systmctl enable nginx

#查看nginx的狀態
$ systemctl status nginx

#檢查 nginx 文件語法是否此錯誤
$ nginx -t

# 重載 nginx 配置
$ nginx -s reload

二、docker安裝

# 拉取鏡像
$ docker pull nginx

# 運行docker
$  docker run  -p 80:80 --name docker-nginx -d nginx

# 將容器中的文件複製到一個文件夾中
$ docker cp docker-nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf

# 刪除上一個運行的 nginx 容器
$ docker rm -f docker -nginx

# 從新啓動一個容器 將數據卷映射到剛纔建立的目錄
$ docker run  -p 80:80 --name docker-nginx1 -d nginx 
        -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  
        -v /usr/local/nginx/conf.d:/etc/nginx/conf.d
        -v /usr/local/nginx/log:/var/log/nginx

三、docker-compose安裝

version: '3.1'
services:
  nginx:
    image: nginx
    restart: always
    container_name: nginx
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 80:80
      - 443:443
    volumes:
      - /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /usr/local/nginx/log:/var/log/nginx

nginx重定向

注:須要先將服務器的 ip解析到域名上

將域名重定向到當前的地址和端口nginx

server {
    # 監聽的端口
    listen 80;
    # 域名
    server_name www.xxx.xxx;
    rewrite ^(.*)$ https://$host$1 permanent;
    client_max_body_size 1024m;
    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 須要代理的 地址和端口
        proxy_pass http://127.0.0.1:8080/;
    }
}

配置httpsdocker

server {
    # 監聽的端口 並開啓ssl
    listen 443 ssl; 
    # 域名
    server_name www.xxx.xxx;
    # 證書 不一樣網站申請的證書不一樣 都可以 只是後綴區分
    ssl_certificate cert/xxx.crt;
    ssl_certificate_key cert/xxx.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    #ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://127.0.0.1:8080/;
        #add_header Content-Security-Policy upgrade-insecure-requests;
    }
}

nginx搭建文件服務器

location /images/ {
    root   /root/;
    autoindex on;
}

root 配置的意思是,會在root配置的目錄後跟上URL,組成對應的文件路徑。shell

意思就是咱們在瀏覽器輸入的這個地址實際訪問的是編程

root/images後端

會把咱們的location後面的/images拼到實際訪問的路徑以後瀏覽器

root/images/images緩存

一、處理方法是把root後面的images去掉服務器

二、root替換成alias網絡

location /images/ {
    alias   /root/images/;
    autoindex on;
}

nginx頁面緩存

proxy_cache_path

格式:proxy_cache_path path [levels=numbers] keys_zone=zone_name:zone_size[inactive=time] [max_size=size]

說明:

path -緩存文件存放的位置

levels-緩存目錄結構,能夠是一、二、3位數字做爲目錄,最可能是3位數字如:1,1:2

keys_zone -指定緩存池名字及大小,每一個定義緩存路徑必須不一樣

inactive -設置每一個緩存區緩存文件的有效時長,超過該時長沒被訪問的緩存被刪除

max_size -設置不活動的緩存大小,不活動的緩存超過該大小後被刪除

$upstream_cache_status包含如下幾種狀態:

·MISS 未命中,請求被傳送到後端
·HIT 緩存命中
·EXPIRED 緩存已通過期請求被傳送到後端
·UPDATING 正在更新緩存,將使用舊的應答
·STALE 後端將獲得過時的應答
配置
# 開啓gzip
gzip  on;
# 啓用gzip壓縮的最小文件,小於設置值的文件將不會壓縮
gzip_min_length 1k;
# gzip 壓縮級別,1-10,數字越大壓縮的越好,也越佔用CPU時間。通常設置1和2
gzip_comp_level 2;

proxy_cache_path /root/cache/ levels=1:2 keys_zone=tmpcache:100m max_size=10g;

server {
    listen       80;
    server_name  localhost;
    charset utf-8;
    # 緩存的服務地址
    add_header X-Via $server_addr;
    # 緩存的狀態 用於區分訪問的資源是緩存的仍是加載的
    add_header X-Cache $upstream_cache_status;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        # 緩存名稱
        proxy_cache tmpcache;
        # 須要緩存的數據狀態 須要緩存保留的時間
        proxy_cache_valid any 1h;
        # 代理地址
        proxy_pass http://127.0.0.1:8080;
    }

nginx訪問控制

deny指令
allow
語法:    allow address | CIDR | unix: | all;
默認值:    —
配置段:    http, server, location, limit_except

容許某個ip或者一個ip段訪問.若是指定unix:,那將容許socket的訪問.
注意:unix在1.5.1中新加入的功能,若是你的版本比這個低,請不要使用這個方法。

deny
語法:    deny address | CIDR | unix: | all;
默認值:    —
配置段:    http, server, location, limit_except
Unix是20世紀70年代初出現的一個操做系統,除了做爲網絡操做系統以外,還能夠做爲單機操做系統使用。

CIDR通常指無類別域間路由。無類別域間路由(Classless Inter-Domain Routing、CIDR)是一個用於給用戶分配IP地址以及在互聯網上有效地路由IP數據包的對IP地址進行歸類的方法。

nginx.conf

# 添加nginx掃描的文件
include blockips.conf;

blockips.conf

# 禁用訪問
deny 192.168.1.101;
# 容許訪問
allow 192.168.1.102;

nginx負載均衡

一、默認分配
upstream ipaddr { 
      server 192.168.1.101:8080; 
      server 192.168.1.102:8081; 
}

location / { 
    root  html; 
    index  index.html index.htm; 
    # 須要實現負載均衡的地址
    proxy_pass http://ip; 
}
二、按照必定比例輪詢
upstream ipaddr { 
    # weight 的值越大 所請求到的概率越大
    server 192.168.1.101:8080 weight=1; 
    server 192.168.1.102:8081 weight=2; 
}
三、響應分配
upstream ipaddr {
    # 公平地按照後端服務器的響應時間(rt)來分配請求,響應時間短即rt小的後端服務器優先分配請求
    server 192.168.1.101;
    server 192.168.1.102;
    fair;
}
四、固定ip分配
upstream ipaddr {
    # 請求按照訪問ip(即Nginx的前置服務器或者客戶端IP)的hash結果分配,這樣每一個訪客會固定訪問一個後端服務器,能夠解決session一致問題。
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
}
五、請求結果分配
upstream ipaddr {
    # 與ip_hash相似,可是按照訪問url的hash結果來分配請求,使得每一個url定向到同一個後端服務器,主要應用於後端服務器爲緩存時的場景下。
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    hash $request_uri;
    hash_method crc32;
}

以上就是經常使用得一些nginx功能分享,若是錯誤請指正,十分感謝!

學習這件事,不是缺少時間,而是缺少努力。

若是對編程感興趣,請關注個人我的博客 https://www.lzmvlog.top/

本文由博客一文多發平臺 OpenWrite 發佈!
相關文章
相關標籤/搜索