Nginx概述及安裝配置

来源:https://www.cnblogs.com/wysk/archive/2018/03/23/8628918.html
-Advertisement-
Play Games

1、概述 Nginx是一款開源的,高性能的Http和反向代理伺服器,同時也是一個IMAP、POP3、SMTP代理伺服器;Nginx可以作為一個HTTP伺服器進行網站的發佈處理,也可以作為反向代理進行負載均衡的實現。 2、反向代理和正向代理 所謂代理其實可以理解為一個代表或者一個渠道,如房產中介,他被 ...


1、概述

Nginx是一款開源的,高性能的Http和反向代理伺服器,同時也是一個IMAP、POP3、SMTP代理伺服器;Nginx可以作為一個HTTP伺服器進行網站的發佈處理,也可以作為反向代理進行負載均衡的實現。

 

2、反向代理和正向代理

所謂代理其實可以理解為一個代表或者一個渠道,如房產中介,他被代理的角色就是各類房主,目標角色就是購房者或租房者,當有購房者前來訪問時,他就根據購房者的需求指定某一套房。

與之對應的就是正向代理,正向代理最大的特點就是客戶端非常明確要訪問的伺服器地址,而伺服器只清楚請求來自於哪個代理伺服器,而不清楚哪個具體的客戶端,例如:我們要訪問某個國外的網站,通過瀏覽器是無妨訪問的,我們必須通過某個代理伺服器,將請求發送給代理伺服器,代理伺服器去訪問國外的網站然後將訪問到數據傳遞給我們。

反向代理舉例

例如某東網站,每天同時訪問的人數爆滿,單個伺服器就不能滿足日益增長的人數,此時就出現了分散式部署,通過多台伺服器解決訪問人數到達極限的問題,這一問題大多數網站就使用Nginx進行反向代理實現,也就是分散式集群操作。

 

當有多個客戶端給伺服器發送請求時,nginx伺服器在接收到請求之後,按照一定的規則分發給後端的業務處理伺服器進行處理,此時請求的來源也就是客戶端是明確的,但請求具體是哪台伺服器處理就是不明確了,nginx扮演的是一個反向代理的角色。

所以反向代理主要用於伺服器集群式分散式部署,對外隱藏了伺服器的信息

 

問:一臺伺服器可以配置兩個Nginx?

理論上是可以的,通過安裝不同的nginx到不同的位置

並且兩個nginx的配置文件中設置的監聽埠不能衝突

可以同時開啟多個nginx

但不建議這樣做,一般是通過server指令添加多個虛擬主機,而不是啟動多個nginx

 

3、負載均衡

Nginx扮演了反向代理伺服器的角色,它是根據什麼樣的規則進行請求分發的?不同的應用場景,分發的規則是否可以控制?

我們把客戶端發送的、nginx反向代理伺服器接收到的請求數量稱為負載量

請求數量按照一定的規則進行分發到不同的伺服器處理規則稱為均衡規則

所以將伺服器接收到的請求按照規則分發的過程稱為負載均衡。

 場景就類似於當一臺伺服器滿了,網站越來越慢,可以將相同的應用部署在多台伺服器上,將大量的用戶分配給多台機器處理,帶來的好處是只要有一臺伺服器宕機了,其他伺服器還正常能運行,不會影響用戶的使用。

負載均衡的配置:

 

upstream myapp {
    server 192.168.0.111:8080; # 應用伺服器1
    server 192.168.0.112:8080; # 應用伺服器2
}
server {
    listen 80;
    location / {
        proxy_pass http://myweb;
    }
}

 

 

負載均衡-----硬體負載(價格昂貴成本高,但數據安全性有很好的保障)

    -----軟體負載(利用現有的技術結合主機硬體實現的一種消息隊列分發機制)

 

Nginx支持的負載均衡的調度方式:

1、weight輪詢(預設):接收到的請求按照順序逐一分配到不同的後端伺服器,即使在使用過程中,某一臺後端伺服器宕機,nginx會自動將該伺服器剔除出隊列,請求受理情況不會受到任何影響。 這種方式下,可以給不同的後端伺服器設置一個權重值(weight),用於調整不同的伺服器上請求的分配率;權重數據越大,被分配到請求的幾率越大;該權重值,主要是針對實際工作環境中不同的後端伺服器硬體配置進行調整的。

2、ip_hash:每個請求按照發起客戶端的ip的hash結果進行匹配,這樣的演算法下一個固定ip地址的客戶端總會訪問到同一個後端伺服器,這也在一定程度上解決了集群部署環境下session共用的問題。

3、fair:智能調整調度演算法,動態的根據後端伺服器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的伺服器分配到請求的概率高,響應時間長處理效率低的伺服器分配到的請求少;結合了前兩者的優點的一種調度演算法。但是需要註意的是nginx預設不支持fair演算法,如果要使用這種調度演算法,請安裝upstream_fair模塊。

4、url_hash:按照訪問的url的hash結果分配請求,每個請求的url會指向後端固定的某個伺服器,可以在nginx作為靜態伺服器的情況下提高緩存效率。同樣要註意nginx預設不支持這種調度演算法,要使用的話需要安裝nginx的hash軟體包。

 

4、虛擬主機

場景:比如有這樣的網站,訪問量比較小,為了節約成本,將多個網站部署在同一臺伺服器上,用戶去訪問的時候功能變數名稱解析的是同一個IP。但用戶卻能正確的打開不同的網站,互不影響,就像訪問兩台伺服器一樣,這種情況叫兩個虛擬主機

配置如下:

server {
    listen 80 default_server;
    server_name _;
    return 444; # 過濾其他功能變數名稱的請求,返回444狀態碼
}
server {
    listen 80;
    server_name www.aaa.com; # www.aaa.com功能變數名稱
    location / {
        proxy_pass http://localhost:8080; # 對應埠號8080
    }
}
server {
    listen 80;
    server_name www.bbb.com; # www.bbb.com功能變數名稱
    location / {
        proxy_pass http://localhost:8081; # 對應埠號8081
    }
}

在伺服器8080和8081分別開了一個應用,客戶端通過不同的功能變數名稱訪問,根據server_name可以反向代理到對應的應用伺服器。

虛擬主機的原理是通過HTTP請求頭中的Host是否匹配server_name來實現的.

 5、Nginx的安裝配置

 系統平臺:CentOS release 6.6 (Final) 64位。

5.1、安裝編譯工具及庫文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

5.2、首先要安裝 PCRE

PCRE 作用是讓 Nginx 支持 Rewrite 功能。

1、下載 PCRE 安裝包,下載地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

2、解壓安裝包

[root@bogon src]# tar zxvf pcre-8.35.tar.gz

3、進入安裝包目錄

[root@bogon src]# cd pcre-8.35

4、編譯安裝 

[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install

5、查看pcre版本

[root@bogon pcre-8.35]# pcre-config --version

 5.2、安裝 Nginx

1、下載 Nginx,下載地址:http://nginx.org/download/nginx-1.6.2.tar.gz

[root@bogon src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz

2、解壓安裝包

[root@bogon src]# tar zxvf nginx-1.6.2.tar.gz

3、進入安裝包目錄

[root@bogon src]# cd nginx-1.6.2

4、編譯安裝

[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install

5、查看nginx版本

[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v

到此,nginx安裝完成。

5.3、Nginx 配置

創建 Nginx 運行使用的用戶 www:

[root@bogon conf]# /usr/sbin/groupadd www 
[root@bogon conf]# /usr/sbin/useradd -g www www

配置nginx.conf ,將/usr/local/webserver/nginx/conf/nginx.conf替換為以下內容

[root@bogon conf]#  cat /usr/local/webserver/nginx/conf/nginx.conf

user www www;
worker_processes 2; #設置值和CPU核心數一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日誌位置和日誌級別
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
  use epoll;
  worker_connections 65535;
}
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';
  
#charset gb2312;
     
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
     
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 60;
  tcp_nodelay on;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  gzip on; 
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
 
  #limit_zone crawler $binary_remote_addr 10m;
 #下麵是server虛擬主機的配置
 server
  {
    listen 80;#監聽埠
    server_name localhost;#功能變數名稱
    index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站點目錄
      location ~ .*\.(php|php5)?$
    {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
    {
      expires 30d;
  # access_log off;
    }
    location ~ .*\.(js|css)?$
    {
      expires 15d;
   # access_log off;
    }
    access_log off;
  }

}

檢查配置文件ngnix.conf的正確性命令:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t

5.4、啟動 Nginx

Nginx 啟動命令如下:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx

 訪問站點

從瀏覽器訪問我們配置的站點ip:

Nginx 其他命令

以下包含了 Nginx 常用的幾個命令:

/usr/local/webserver/nginx/sbin/nginx -s reload            # 重新載入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen            # 重啟 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop              # 停止 Nginx

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 熟悉電腦的人都知道,Linux 相比較於 Windows 有著眾多的優勢,所以現在越來越多的電腦用戶開始使用 Linux 進行辦公、學習。總體來講,Linux 的優勢主要有以下幾個方面。 一、開源、免費 眾所周知,不管是微軟的 Windows 還是蘋果的 macOS,都是需要付費的,而且是比較昂貴的 ...
  • 隨著深度學習、區塊鏈的發展,人類對計算量的需求越來越高,在傳統的計算模式下,壓榨GPU的計算能力一直是重點。 NV系列的顯卡在這方面走的比較快,CUDA框架已經普及到了高性能計算的各個方面,比如Google的TensorFlow深度學習框架,預設內置了支持CUDA的GPU計算。 AMD(ATI)及其 ...
  • 介紹 它是一套數據緩存系統或軟體 用於動態應用系統中緩存資料庫的數據,減少資料庫的訪問壓力,達到提升性能的效果,實際應用環境中多用於資料庫的cache的應用。它是通過預分配指定的記憶體空間來存儲數據 定義 它是一個開源的、高性能的,具有分散式記憶體對象的緩存系統,它一般用來存儲經常讀取的對象或數據,如同 ...
  • 簡介 Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支持,最新的Servlet 和JSP 規範總是能在Tomcat 中得到體現,T ...
  • PS: 用的阿裡雲伺服器(ECS,Linux系統),搭配彈性公網IP(EIP)。 一、使用Xshell鏈接ECS 1.將公網IP填入主機即可 2.用戶名一般為root,密碼是自己設置的,填入即可。點擊確定,然後就可以鏈接了。 二、Node.js安裝 1.通過rz命令實現上傳文件 2.查看linux系 ...
  • Linux遠程連接可以使用SecureCRT工具完成 SecureCRT下載地址 修改虛擬機中的網路適配器 改為橋接模式 一,配置:在Linux終端上獲取IP地址 ifconfig 二,同時需要關閉防火牆 centos 7 systemctl stop firewalld 三,使用SecureCRT ...
  • ssh 免密碼登錄 說明: ssh 無密碼登錄要使用公鑰與私鑰。 linux或者mac系統下可以用用ssh-keygen生成公鑰/私鑰對。 1.在本機生成密鑰(~/.ssh目錄下生成id_rsa和id_rsa.pub。 2.發送公鑰到遠程主機 ~/ 目錄下 3.登錄遠程主機把公鑰追加到授權key中 ...
  • CentOS 7安裝指南(U盤版) 一、準備階段 1、下載CentOS7鏡像文件(ISO文件)到自己電腦,官網下載路徑: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso 如下圖 圖1-1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...