您好,登錄后才能下訂單哦!
一、配置虛擬主機
1.基于端口配置虛擬主機
1.1配置文件:
[root@localhost conf.d]# vim vhost.conf
server {
listen 8080 ;
root /usr/share/nginx/html;
location / {
}
}
server {
listen 8081;
root /usr/share/nginx/html;
location / {
}
}
1.2驗證:
2.基于IP地址配置虛擬主機:
2.1配置文件:
[root@localhost conf.d]# vim vhost.conf
server {
listen 172.20.10.9:8080 ;
root /usr/share/nginx/html;
location / {
}
}
server {
listen 172.20.10.11:8080;
root /usr/share/nginx/html;
location / {
}
}
2.2驗證:
3.基于域名配置虛擬主機
3.1nginx配置文件:
[root@localhost conf.d]# vim vhost.conf
server {
listen 80;
server_name www.a.com;
root /data/a/html;
location / {
}
}
server {
listen 80;
server_name www.b.com;
root /data/b/html;
location / {
}
}
3.2分別為虛擬主機配置root路徑
[root@localhost /]# mkdir -pv /data/a/html/
[root@localhost html]# vim /data/a/html/index.html
www.a.com
[root@localhost /]# mkdir -pv /data/b/html/
[root@localhost html]# vim /data/b/html/index.html
www.b.com
3.3client端配置hosts文件
配置windows主機在C:\Windows\System32\drivers\etc下的hosts文件:
(4)驗證:
二.nginx反向代理:
1.反向代理配置參數:
1.1proxy_pass:
用來設置將客戶端請求轉發給的后端服務器主機,可以是主機名,IP地址:端口的方式,也可以代理到預先設置的主機群組,需要模塊ngx_http_upstream_module支持
location /web {
index index.html
proxy_pass http://172.20.10.8:80;
#不帶斜線將訪問的/web,等于訪問后端服務器http://172.20.10.8/web/index.html,即后端服務器配置的站點根目錄要有web目錄才可以訪問,這是一個追加/web到后端服務器http://servername:port/WEB/INDEX.HTML的操作
proxy_pass http://172.20.10.8:80/
#帶斜線,等于訪問后端服務器的http://172.20.10.8:80/index.html內容返回客戶端
}
1.2proxy_hide_header
#用于nginx作為反向代理的時候,在返回客戶端http響應的時候,隱藏后端服務器版本相應頭部的信息,可以設置在http/server或location塊;
location /web {
index index.html;
proxy_pass http://172.20.10.8:80;
proxy_hide_header ETag;
}
1.3 proxy_pass_request_body on|off
#是否向后端服務器HTTP包體部分,可以設置在http/server或location塊,默認即為開啟
1.4 proxy_pass_request_headers on|off
#是否將客戶端的請求頭部轉發給后端服務器,可以設置在http/server或location塊,默認即為開啟
1.5proxy_set_header
#可以更改或添加客戶端的請求頭部信息內容并轉發后端服務器,比如在后端服務器想要獲取客戶端的真是IP的時候,就要更改每一個報頭的頭部,如下:
proxy_set_header X-Forward-For $proxy_add_x_forward_for;
#proxy_set_header HOST $remote_addr;
#添加HOST到報文頭部,如果客戶端為NAT上網那么真實為客戶端的共用的公網IP地址
1.6proxy_hide_header field:
#用于隱藏后端服務器特定的響應首部,默認nginx在響應報文中不傳遞后端服務器的首部字段Date,Server,X-Pad,X-Accel等
1.7proxy_connect_timeout 60;
#配置nginx服務器與后端服務器嘗試建立連接的超時時間,默認為60s,
proxy_connect_timeout 60s
60s為自定義nginx與后端服務器建立連接的超時時間
1.8proxy_read_time time;
#配置nginx服務器向后端服務器或服務器組發起read發起read請求后,等待的超時時間,默認為60s
proxy_send_time time;
#配置nginx后端服務器或服務器組發起write請求后,等待的超時時間,默認為60s
1.9proxy_http_version 1.0:
#用于設置nginx提供代理服務的HTTP協議的版本,默認http1.0
1.10proxy_ignore_client_abort off;
#當客戶端網絡中斷時,nginx服務器中斷其對后端服務器的請求。即如果此項設置為ON開啟,則服務器忽略客戶端中斷并一直等著代理服務器執行返回,如果設置為off,則客戶端中斷后nginx也會中斷客戶端并立即記錄日志,默認為off
1.11proxy_headers_hash_bucket_size 64;
#當配置proxy_hide_header和proxy_set_header的時候,用于設置nginx保存HTTP報文的hash表上限
proxy_headers_hash_max_size 512;
#設置proxy_headers_hash_max_size的最大可用空間
server_name_hash_bucket_size 512;
#設置server_name_hash表申請空間大小
server_names_hash_size 512;
#設置服務名稱hash表上限大小
2.反向代理示例:
2.1單臺web服務器
location / {
proxy_pass http://172.20.10.8;
}
2.2指定location;
location /web {
proxy_pass http://172.20.10.8:80/;
}
注意后面的/
測試:
[root@node7 ~]# curl 172.20.10.9/web
172.20.10.8 index page
3緩存功能:
3.1proxy_cache zone | off; 默認off
#指明調用的緩存,或關閉緩存機制;Context:http, server, location
3.2proxy_cache_key string;
#緩存中用于“鍵”的內容,默認值:proxy_cache_key $scheme$proxy_host$request_uri;
3.3proxy_cach#定義對特定響應碼的響應內容的緩存時長,定義在http{...}中
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;e_valid [code ...] time;
3.4proxy_cache_path;
定義可用于proxy功能的緩存;Context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size
[inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time]
[manager_threshold=time] [loader_files=number] [loader_sleep=time]
[loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time]
[purger_threshold=time];
示例:在http配置定義緩存信息
proxy_cache_path /var/cache/nginx/proxy_cache #定義緩存保存路徑,proxy_cache會自動創
建
levels=1:2:2 #定義緩存目錄結構層次,1:2:2可以生成2^4x2^8x2^8=1048576個目錄
keys_zone=proxycache:20m #指內存中緩存的大小,主要用于存放key和metadata(如:使用次數)
inactive=120s; #緩存有效時間
max_size=1g; #最大磁盤占用空間,磁盤存入文件內容的緩存空間最大值
3.5#調用緩存功能,需要定義在相應的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
3.6proxy_cache_use_stale;
#在被代理的后端服務器出現哪種情況下,可直接使用過期的緩存響應客戶端,
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 |
http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默認是off
3.7proxy_cache_methods GET | HEAD | POST ...;
#對哪些客戶端請求方法對應的響應進行緩存,GET和HEAD方法總是被緩存
3.8proxy_set_header field value;
#設定發往后端主機的請求報文的請求首部的值
Context: http, server, location
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
請求報文的標準格式如下:
X-Forwarded-For: client1, proxy1, proxy2
3.9緩存配置:
proxy_cache_path /data/nginx/proxycache levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
location /web {
proxy_pass http://172.20.10.8:80;
proxy_set_header clientip $remote_addr;
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
}
4.添加頭部報文信息:
4.1nginx基于模塊ngx_http_headers_module可以實現對頭部報文添加指定的key與值#添加自定義首部,如下:
add_header name value [always];
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;
add_trailer name value [always];
添加自定義響應信息的尾部, 1.13.2版后支持
4.2nginx配置:
location /web {
proxy_pass http://172.20.10.8:80;
proxy_set_header clientip $remote_addr;
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
add_header X-Via $server_addr;
add_header X-Cache $upstream_cache_status;
add_header X-Accel $server_name;
}
4.3驗證頭部信息:
5.反向代理高級應用:
Nginx可以基于ngx_http_upstream_module模塊提供服務器分組
轉發、權重分配、狀態監測、調度算法等高級功能
5.1http_upstream_module配置參數
upstream name {
}
#自定義一組服務器,配置在http內
server address [parameters];
#配置一個后端web服務器,配置在upstream內,至少要有一個server服務器配置。
#server支持的parameters如下:
weight=number #設置權重,默認為1。
max_conns=number #給當前server設置最大活動鏈接數,默認為0表示沒有限制。
max_fails=number #對后端服務器連續監測失敗多少次就標記為不可用。
fail_timeout=time #對后端服務器的單次監測超時時間,默認為10秒。
backup #設置為備份服務器,當所有服務器不可用時將重新啟用次服務器。
down #標記為down狀態。
resolve #當server定義的是主機名的時候,當A記錄發生變化會自動應用新IP而不用重啟Nginx。
hash KEY consistent;
#基于指定key做hash計算,使用consistent參數,將使用ketama一致性hash算法,適用于后端是Cache服務
器(如varnish)時使用,consistent定義使用一致性hash運算,一致性hash基于取模運算。
所謂取模運算,就是計算兩個數相除之后的余數,比如10%7=3, 7%4=3
hash $request_uri consistent; #基于用戶請求的uri做hash
ip_hash;
#源地址hash調度方法,基于的客戶端的remote_addr(源地址)做hash計算,以實現會話保持,
least_conn;
#最少連接調度算法,優先將客戶端請求調度到當前連接最少的后端服務器
5.2反向代理配置示例--多臺web服務器:
upstream webserver {
# hash $request_uri consistent;
# ip_hash;
# least_conn;
server 172.20.10.10:80 weight=1 fail_timeout=5s max_fails=3;
server 172.20.10.8:80 weight=1 fail_timeout=5s max_fails=3;
server 172.20.10.9:80 weight=1 fail_timeout=5s max_fails=3 backup;
}
location /web {
index index.html;
proxy_pass http://webserver/;
}
5.3反向代理示例-客戶端IP透傳:
(1)nginx配置文件:
upstream webserver {
# hash $request_uri consistent;
# ip_hash;
# least_conn;
# server 172.20.10.10:80 weight=1 fail_timeout=5s max_fails=3;
server 172.20.10.8:80 weight=1 fail_timeout=5s max_fails=3;
server 172.20.10.9:80 weight=1 fail_timeout=5s max_fails=3 backup;
}
location /web {
index index.html;
proxy_pass http://webserver/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
(2)后端httpd服務器配置
[root@node6 conf]# vim httpd.conf
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#重啟apache訪問web界面并驗證apache日志:
[root@node6 conf]# tail -2 /var/log/httpd/access_log
- 172.20.10.2 - - [01/Dec/2019:15:45:21 +0800] "GET /web/ HTTP/1.1" 200 22 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
- 172.20.10.2 - - [01/Dec/2019:15:45:21 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。