nginx詳解(代理服務器的解釋+nginx 在linux 下的安裝+nginx.conf 中的配置解釋)


一、概論

1、什么是代理服務器

代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之后,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。

2、為什么要使用代理服務器

1)提高訪問速度

    由於目標主機返回的數據會存放在代理服務器的硬盤中,因此下一次客戶再訪問相同的站點數據時,會直接從代理服務器的硬盤中讀取,起到了緩存的作用,尤其對於熱門站點能明顯提高請求速度。

2)防火牆作用

    由於所有的客戶機請求都必須通過代理服務器訪問遠程站點,因此可在代理服務器上設限,過濾某些不安全信息。

3)通過代理服務器訪問不能訪問的目標站點

    互聯網上有許多開發的代理服務器,客戶機在訪問受限時,可通過不受限的代理服務器訪問目標站點,通俗說,我們使用的翻牆瀏覽器就是利用了代理服務器,雖然不能出國,但也可直接訪問外網。

二、反向代理 VS 正向代理
1、什么是正向代理?什么是反向代理?

正向代理,架設在客戶機與目標主機之間,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。

反向代理服務器架設在服務器端,通過緩沖經常被請求的頁面來緩解服務器的工作量,將客戶機請求轉發給內部網絡上的目標服務器;並將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器與目標主機一起對外表現為一個服務器。

2、反向代理有哪些主要應用?

現在許多大型web網站都用到反向代理。

  1.可以防止外網對內網服務器的惡性攻擊.

  2.緩存以減少服務器的壓力:比如對於不經常變更的圖片(nginx 利用expires來讓客戶端緩存數據)

                    

 

  3.可以進行負載均衡,將用戶請求分配給多個服務器.

 

2. Nginx 安裝

2.1 安裝編譯工具及庫文件

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

2.2 //創建一個文件夾

cd /usr/local
mkdir nginx
cd nginx

32.3 下載tar包

wget http://nginx.org/download/nginx-1.13.7.tar.gz

2.4  解壓

tar -xvf nginx-1.13.7.tar.g

2.5  進入nginx文件夾

//執行命令
./configure
make
make install

注意看下面的截圖,標紅的地址就是ngin安裝的目錄

2.6  //進入nginx裝目錄(就是上面圖片中標紅的地址,千萬不要和nginx解壓目錄搞混了)

cd /usr/local/nginx

2.7 nginx api( cd sbin)

 啟動  ./nginx     停止.   /nginx stop     重啟 .  /ngnix --s reload

2.8 查看nginx是否啟動成功

curl 127.0.0.1:80

 

 

3. nginx服務代理后訪問出錯 403 forbidden 的解決辦法

前在配置nginx時遇到的這個問題最終得以解決   所以貼出解決的辦法

機器是conterOS 7.3的版本

我的靜態文件和js 放在 roo/weixin/web  下

出現這種情況的原因我一共使用到三個方法

原因1   是因為要訪問的文件所屬者不屬於nginx   到文件存儲目錄輸入命令: chown nginx:nginx  file   更改文件的所有者

 


原因2   是因為文件沒有可讀可寫權限  到文件存儲目錄 輸入命令: chmod -R  777 file  更改文件的讀寫權限   -R代表遞歸該目錄下所有文件

 

 

原因3   nginx.conf配置文件 user選項所對應的是默認的用戶名或者是nginx (也是權限不夠高) 改成root即可

4. nginx 的nginx.conf 詳解

  4.1.1 下面是nginx.conf 的配置詳細解釋            

#任何用戶都能訪問
#user nobody;
#開啟進程數 <=CPU數 
worker_processes 1;

 

#錯誤日志保存位置
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

 

#進程號保存文件
#pid logs/nginx.pid;

 

#每個進程最大連接數(最大連接=連接數x進程數)每個worker允許同時產生多少個鏈接,默認1024
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壓縮
#gzip on;

#設定請求緩沖
#client_header_buffer_size 1k;
#large_client_header_buffers 4 4k;

#設定負載均衡的服務器列表
#upstream myproject {
#weigth參數表示權值,權值越高被分配到的幾率越大
#max_fails 當有#max_fails個請求失敗,就表示后端的服務器不可用,默認為1,將其設置為0可以關閉檢查
#fail_timeout 在以后的#fail_timeout時間內nginx不會再把請求發往已檢查出標記為不可用的服務器
#}

#webapp 設定負載均衡的服務器列表(需要在loaction中調用)
upstream myapp {
server 48.102.102.102:9999 weight=1 max_fails=2 fail_timeout=30s;
server 34.68.1.172:8888 weight=1 max_fails=2 fail_timeout=30s;
}

#虛擬主機配置: 這個server 主要是說明nginx 怎么通過 反向代理找到nginx 下的靜態文件的(把項目的靜態文件放大nginx 對應目錄中)
server {
#監聽端口
listen 1234;
#監聽域名
server loveliuqianqian.top;
#配置訪問日志(注意建對應的文件夾)
access_log logs/bhz.com.access.log main;
#location 后面的表達式就是監聽項目的路由

#正則表達式匹配uri方式:在/usr/local/nginx/bhz.com下 建立一個test123.html 然后使用正則匹配(可以設置白名單和黑名單)
#location ~ test {
## 重寫語法:if return (條件 = ~ ~*)
#if ($remote_addr = 192.168.1.200) {
# return 401;
#}
#對於瀏覽器的過濾
#if ($http_user_agent ~* firefox) {
# rewrite ^.*$ /firefox.html;
# break;
#}
#返回根路徑地址(相對路徑:root = /usr/local/nginx/)
root bhz.com;
index index.html;
}

#location /goods {
#就是進行了二次跳轉,比如輸入:loveliuqianqian.top:1234/goods1.html 符合要求,
#然后訪問的變成了loveliuqianqian.top:1234/goods-ctrl.html 所以我們訪問的靜態頁面變成了goods-ctrl.html
# rewrite "goods-(\d{1,5})\.html" /goods-ctrl.html;
# root bhz.com;
# index index.html;
#}
}

 

#虛擬主機配置: 這個server 主要是說明怎么反向代理到某個tomcate 和負載均衡到多個tomcat

 

#配置虛擬主機,基於域名、ip和端口
server {
#監聽端口
listen 80;
#監聽域名
server_name loveliuqianqian.top;

 

#charset koi8-r;

#nginx訪問日志放在logs/host.access.log下,並且使用main格式(還可以自定義格式,main 在配置文件的最上面寫的有)
#access_log logs/host.access.log main;

#配置反向代理tomcat服務器:攔截.jsp結尾的請求轉向到tomcat
#location ~ \.jsp$ {
# proxy_pass http://192.168.1.171:8080;
#}

#返回的相應文件地址
location ~ \.jsp${
#設置客戶端真實ip地址(反正header 中,key 就是X-real-ip)
#proxy_set_header X-real-ip $remote_addr;
#負載均衡反向代理 myapp 在上面有指定
#proxy_pass http://myapp;
#如何我們不把項目的靜態文件放到nginx中,只單純的使用反向代理和負載均衡的情況下,那么 下面的路徑根本就不用配了。
#返回根路徑地址(相對
路徑:相對於/usr/local/nginx/)
root html;
#默認訪問文件
index index.html index.htm;
}
#錯誤頁面及其返回地址
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}}
}

  對於nginx 配置文件的總結,不管你要配置反向代理還是要配置負載均衡,首先你要配置一個虛擬主機server{},

 然后通過域名和端口+location (http://aaa:8888/)后面配置的路由匹配規則,來定位nginx要攔截的路徑

  1. 配置反向代理

  然后在配置反向代理的服務器,就是在localtion 中配置

 proxy_pass http://47.XXX.XXX.XXX:8185; 然后我們訪問http://aaa:8888/  就可以通過nginx 訪問的http://47.XXX.XXX.XXX:8185。

  2 . 配置負載均衡 (配置其實和反向代理差不多)

  首先在http標簽和server{} 配置要代理的多個服務器

upstream myapp {
server 47.102.102.102:8181 weight=1 max_fails=2 fail_timeout=30s;
server 47.102.102.102:8185 weight=1 max_fails=2 fail_timeout=30s;
}

然后在localtion 中配置  proxy_pass http://myapp;  然后負載均衡就配置好了。 重啟nginx 就行了

在補一句哈,如果nignx 中日志信息太多,我們可以通過linux 的定時任務,crontab -e  加上腳本 進行日志 遷移。 

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM