第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Nginx 配置初步(下)

前面的學習,知道 Nginx 的配置規(guī)則如下:

  • 一行代表一個指令;
  • 每個指令有其上下文環(huán)境,比如 listen 指令只能在 http 指令塊中出現(xiàn),不能單獨出現(xiàn)。

下面我們將學習 Http 服務的初步配置和靜態(tài)服務資源配置:

1. Http 服務配置初步

1.1 常用指令

官方文檔地址中有關于 Nginx 的所有模塊,打開模塊我們就能看到模塊中支持的指令。最常用的指令,如 http、server、listen 等都在 ngx_http_core_modul 模塊中,這個是 Nginx 的核心模塊。

1.2 listen 指令

  Syntax: listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  Default:
  listen *:80 | *:8000;
  Context:	server

listen 指令的上下文環(huán)境是 server 指令,所以 listen 指令只能出現(xiàn)在 server 指令塊中。此外,listen 指令的作用就是監(jiān)聽上層端口,將對應端口發(fā)來的請求進行攔截并處理。官方給了許多 listen 的使用示例:

# 這些寫法要考慮特定的環(huán)境和場景
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

# 比較特殊的用法,針對unix系統(tǒng)
listen unix:/var/run/nginx.sock;

1.3 http 指令

Syntax: http { ... }
Default:Context: main

可以看到 http 指令是指令塊形式,屬于主環(huán)境 main,它里面的指令是用于設置 http 相關參數(shù)的。比如設置 server 配置等,配置連接超時時間等。

...

# 主位置,最左邊
http {
   #指令或者指令塊
   ...
}  

...

1.4 server 指令

Syntax: server { ... }
Default:Context: http

這里 server 的上下文環(huán)境是 http,這說明 server 指令塊只能出現(xiàn)在http指令塊中,否則會出錯。server 指令塊中也是許多指令的集合,比如listen指令,表示監(jiān)聽 http 請求的端口,還有 server_name、root、index 等指令。

...

http {
    server {
        # 監(jiān)聽端口
        listen       8089;
        server_name  localhost;

        # 今天資源根路徑
        root /data/yum_source;
        # 打開目錄瀏覽功能
        autoindex on;
        # 指定網站初始頁,找index.html或者index.htm頁面
        index index.html index.htm;
    }

    ...
}
...

下面我們初步了解下 Nginx 的在一些場景下的配置,使用到的都是一些簡單的配置指令。

2. 靜態(tài)服務資源配置

配置靜態(tài)資源服務器是非常簡單的一件事情。實現(xiàn)靜態(tài)資源訪問的關鍵指令有 root 和 alias,我們會做一個案例來演示其用法和二者的區(qū)別。

2.1 案例1

準備好靜態(tài)資源文件,我們就在 /root/test/ 下新建一個 index.html,并新建目錄 web,同時繼續(xù)在 web 目錄下分別新建 web1.html 和 web2.html 文件,具體的目錄結構如下所示:

[root@server ~]# cd /root/test
[root@server test]# tree .
.
├── index.html
└── web
    ├── web1.html
    └── web2.html

1 directory, 3 files

Nginx 的配置如下:

user  root;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;

        # 靜態(tài)資源根理解
        root /root/test;
        # 打開目錄瀏覽功能
        autoindex on;
        # 指定網站初始頁,找index.html或者index.htm頁面
        index index.html index.htm;
    }

    server {
        listen       8081;

        location /web {
            root /root/test/;
        }
    }

    server {
        listen       8082;

        location /web {
            alias /root/test/;
        }
    }

}

測試結果

對于監(jiān)聽的 8080 端口,我們直接使用 root 指令,指定資源的根路徑。這樣子,當我們在瀏覽器上直接訪問 http:// 服務器的 ip:8080/web/web1.html 或者 http://服務器ip:8080/web/web2.html 時,就能訪問對應的 web1.html 和 web2.html 頁面;若沒有指定靜態(tài)資源地址(即/路徑),默認會找由 index 指令指定的文件,即 index.html 或者 index.htm 文件;

訪問 8080 的/地址

圖片描述

訪問web1.html文件
圖片描述

訪問web2.html文件
圖片描述

對于監(jiān)聽的 8081 端口,我們直接使用 root 指令,指定資源的根路徑。當請求 http://服務器ip:8081/web/xxxx 地址時,等價于訪問服務器上的靜態(tài)資源文件 /root/test/[匹配到的web]/xxxx,也即/root/test/web/xxxx,訪問 web2.html 類似;

通過 8081 端口訪問 web1.html 資源
圖片描述

通過 8081 端口訪問靜態(tài)資源 web2.html
圖片描述

對于監(jiān)聽的 8082 端口,我們使用的是 alias 指令,指定資源路徑的別名,它與 root 指令略有不同。當請求 http://服務器ip:8082/web/xxxx 地址時,等價于訪問服務器上的靜態(tài)資源文件 /root/test/xxxx,并不會將匹配到的web添加到靜態(tài)資源的路徑上,所有為了能訪問到 web1.html,我們需要使用如下的url:http://服務器ip:8082/web/web/web1.html, 訪問 web2.html 類似。結果如下:

通過alias指令訪問web1.html

圖片描述
通過alias指令訪問web2.html
圖片描述

3. 反向代理配置初步

反向代理是將客戶機請求轉發(fā)給內部網絡上的目標服務器;并將從服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器與目標主機一起對外表現(xiàn)為一個服務器。

這樣做的好處是可以隱藏內部服務部署情況,通過統(tǒng)一入口控制網絡流量。另外,我們還可以在總入口處設置負載均衡,將用戶請求分配給多個服務器。反向代理實現(xiàn)的指令是 proxy_pass ,我們簡單使用下這個指令進行測試,了解其作用。

案例

在上面配置文件的基礎上,我們增加一個 server 指令塊,監(jiān)聽 9000 端口,匹配 url 請求,轉發(fā)到 web1.html 和 web2.html 頁面,具體配置如下:

    ...

    server {
        listen       9000;

        location /web1 {
            proxy_pass http://localhost:8081/web/web1.html;
        }

        location /web2 {
            proxy_pass http://localhost:8081/web/web2.html;
        }
    }

    ...

這樣,當我們訪問 url 地址 http://服務器ip:9000/web1 時,會將請求轉發(fā)到 http://localhost:8081/web/web1.html ,而這個如果是在服務器上執(zhí)行會根據前面的配置訪問靜態(tài)資源web1.html。 同樣,對于訪問 web2.html 頁面,我們只需要請求 http://服務器ip:9000/web2 即可。

測試結果

通過方向代理訪問 web1.html
圖片描述

通過方向代理訪問 web2.html
圖片描述

4. tcp/udp 配置初步

Nginx 從 1.9.0 版本開始,新增加了一個 stream 模塊,用來實現(xiàn)四層協(xié)議的轉發(fā)、代理或者負載均衡等。這個模塊使用和 http 指令塊類似。我們同樣在之前的配置準備一個 nginx.conf 文件,里面只有一個 stream 的指令塊,如下:

user  root;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

stream {
    server {
        listen 3000;
        return '3000 server get ip: $remote_addr!\n';
    }
}

上述指令塊只有一個 stream 塊,監(jiān)聽了 3000 端口。對于 tcp 連接,可以使用 proxy_pass 轉發(fā) tcp/udp 協(xié)議。也可以直接使用 return 指令返回,這里只是簡單返回相應字符串。

測試結果

在 Windows 下,打開命令窗口,然后輸入telnet 180.76.152.113 3000 命令,正常應該會有相應的字符串響應。如果出現(xiàn)下面的錯誤,需要在Window 中打開 telnet 客戶端,具體操作見下圖。
圖片描述

解決找不到 telnet 命令方法 1
圖片描述

在這里選擇勾上 Telnet 客戶端即可。
圖片描述

最后 telent 命令返回結果:
圖片描述

5. 小結

這節(jié)內容,我們繼續(xù)學習并實戰(zhàn)了 Nginx 的相關配置,涵蓋了靜態(tài)資源配置、反向代理以及 tcp 層處理等,為后續(xù)進一步深入學習 Nginx 做好相關鋪墊。