Nginx尚硅谷学习笔记
Nginx
- 1.Nginx是什么
- 1.1 反向代理
- 1.2 負載均衡
- 1.3 動靜分離
- 2. niginx安裝、常用命令和配置文件
- 2.1 linux系統中安裝nginx
- 2.2 nginx常用命令
- 2.3 nginx配置文件
- 2.3.1 源碼
- 2.3.2 配置文件的結構和組成
- 2.3.3 詳細注釋
- 3.ngingx配置實例 1-反向代理
- 4.ngingx配置實例 2-負載均衡
- 5.ngingx配置實例 3-動靜分離
- 6.ngingx配置高可用集群
- 7.Nginx原理
1.Nginx是什么
-
Nginx 是高性能的 HTTP 和反向代理的服務器,特點是占用內存少。處理高并發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數。
-
Nginx 可以作為靜態頁面的 web 服務器,同時還支持 CGI 協議的動態語言,比如 perl、php等。但是不支持 java。Java 程序只能通過與 tomcat 配合完成。Nginx 專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率。
-
Nginx支持熱部署。它的啟動非常容易,并且幾乎可以做到不間斷運行。
1.1 反向代理
(1)
Nginx不僅可以用作反向代理,實現負載均衡,還能用作正向代理上網等功能。
首先,正向代理是什么?
正向代理:把局域網外的Internet想象成一個資源庫。
那么局域網內的客戶端訪問外面的Internet,就需要通過一個代理服務器訪問,這種代理服務器稱為正向代理。
比如你中國移動網絡下(客戶端網絡),通過瀏覽器(配置代理服務器),訪問美國網絡下的谷歌網站(網絡)里面的內容(服務器)。
(2)
反向代理中,客戶端不需要配置,所以反向代理對于客戶端是無感知的。
客戶端只需要把請求發送給反向代理服務器,讓反向代理服務器選擇目標網站服務器獲取數據后,返回給客戶端。
所以,區別于正向代理服務器的“引薦”,反向代理服務器是“傳話”。
那么客戶端看見的就是代理服務器IP地址,而不是目標服務器的IP地址。
講了概念,那么問題:
1.正向代理和反向代理是如何實現的呢?2.反向代理是怎么發展的?3.都有什么應用?
1.2 負載均衡
簡而言之:分擔請求
增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器上的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,也就是我們所說的負載均衡。
1.3 動靜分離
概念目的:加快網站解析速度
概念實現:把動態界面和靜態界面分開解析,降低單個服務器壓力。
靜態頁面:html、css、js
動態頁面:jsp、servlet
對比如下:
舊版:把動靜態部署到單個服務器tomcat中,造成請求壓力加劇。
問題:
分開部署是如何實現的?
2. niginx安裝、常用命令和配置文件
2.1 linux系統中安裝nginx
安裝包解壓
在 /usr/local/下創建 nginx ?件夾并進?
將 Nginx 安裝包解壓到 /usr/local/nginx 中即可
預先安裝額外的依賴
yum -y install pcre-devel yum -y install openssl openssl-devel編譯安裝NGINX
cd nginx-1.12.2 ./configure make && make install安裝完成后,Nginx的可執??件位置位于/usr/local/nginx/sbin/nginx
啟動NGINX
直接執?如下命令即可:
/usr/local/nginx/sbin/nginx 如果想停?Nginx服務,可執?: /usr/local/nginx/sbin/nginx -s stop如果修改了配置?件后想重新加載Nginx,可執?:
/usr/local/nginx/sbin/nginx -s reload注意其配置?件位于:/usr/local/nginx/conf/nginx.conf
PS:如果通過本地連接看不見nginx網頁,就把防火墻關一下
2.2 nginx常用命令
首先進入到目錄:
cd /usr/local/nginx/sbin查看版本號
./nginx -v啟動Nginx
./nginx關閉Nginx
./nginx -s stop重新加載配置文件
./nginx -s reload2.3 nginx配置文件
配置文件位置:/usr/local/nginx/cong/nginx.conf
2.3.1 源碼
#user nobody; worker_processes 1;#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 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}2.3.2 配置文件的結構和組成
結構
... #全局塊events { #events塊... }http #http塊 {... #一個http全局塊開始server #多個server塊{ ... #一個server全局塊location [PATTERN] #多個location塊{...}location [PATTERN] {...}}server{... #一個server全局塊和多個location塊}... #http全局塊結束 }第一部分:全局塊
從配置文件開始到 events 塊之間的內容,主要會設置一些影響 nginx 服務器整體運行的配置指令,主要包括配置運行 Nginx 服務器的用戶(組)、允許生成的 worker process 數,進程 PID 存放路徑、日志存放路徑和類型以及配置文件的引入等。 比如上面第一行配置的:
worker_processes 1;這是 Nginx 服務器并發處理服務的關鍵配置,worker_processes 值越大,可以支持的并發處理量也越多,但是會受到硬件、軟件等設備的制約。
第二部分:events 塊
events {worker_connections 1024; }events 塊涉及的指令主要影響 Nginx 服務器與用戶的網絡連接,常用的設置包括是否開啟對多 work process 下的網絡連接進行序列化,是否允許同時接收多個網絡連接,選取哪種事件驅動模型來處理連接請求,每個 work process 可以同時支持的最大連接數等。上述例子就表示每個 work process 支持的最大連接數為 1024。
這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。
第三部分:http 塊
這算是 Nginx 服務器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數功能和第三方模塊的配置都在這里。需要注意的是:http 塊也可以包括 http 全局塊、server 塊。
- http全局塊:
http 全局塊配置的指令包括文件引入、MIME-TYPE 定義、日志自定義、連接超時時間、單鏈接請求數上限等。
- server塊
這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一臺獨立的硬件主機是完全一樣的,該技術的產生是為了節省互聯網服務器硬件成本。
每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當于一個虛擬主機。而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 location 塊。
全局server塊:最常見的配置是本虛擬機主機的監聽配置和本虛擬主機的名稱或 IP 配置。
location塊:一個 server 塊可以配置多個 location 塊。這塊的主要作用是基于 Nginx 服務器接收到的請求字符串(例如 server_name/uri-string),對虛擬主機名稱(也可以是 IP 別名)之外的字符串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
2.3.3 詳細注釋
########### 每個指令必須有分號結束。################# #user administrator administrators; #配置用戶或者組,默認為nobody nobody。 #worker_processes 2; #允許生成的進程數,默認為1 #pid /nginx/pid/nginx.pid; #指定nginx進程運行文件存放地址 error_log log/error.log debug; #制定日志路徑,級別。這個設置可以放入全局塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg events {accept_mutex on; #設置網路連接序列化,防止驚群現象發生,默認為onmulti_accept on; #設置一個進程是否同時接受多個網絡連接,默認為off#use epoll; #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections 1024; #最大連接數,默認為512 } http {include mime.types; #文件擴展名與文件類型映射表default_type application/octet-stream; #默認文件類型,默認為text/plain#access_log off; #取消服務日志 log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式access_log log/access.log myFormat; #combined為日志格式的默認值sendfile on; #允許sendfile方式傳輸文件,默認為off,可以在http塊,server塊,location塊。sendfile_max_chunk 100k; #每個進程每次調用傳輸數量不能大于設定的值,默認為0,即不設上限。keepalive_timeout 65; #連接超時時間,默認為75s,可以在http,server,location塊。upstream mysvr { server 127.0.0.1:7878;server 192.168.10.121:3333 backup; #熱備}error_page 404 https://www.baidu.com; #錯誤頁server {keepalive_requests 120; #單連接請求上限次數。listen 4545; #監聽端口server_name 127.0.0.1; #監聽地址 location ~*^.+$ { #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫。#root path; #根目錄#index vv.txt; #設置默認頁proxy_pass http://mysvr; #請求轉向mysvr 定義的服務器列表deny 127.0.0.1; #拒絕的ipallow 172.18.5.54; #允許的ip } } }3.ngingx配置實例 1-反向代理
1、實現效果:
(1)打開瀏覽器,在瀏覽器的地址欄中 www.123.com,跳轉到 liunx 系統中 tomcat 主頁面中
2、準備工作:
(1)在liunx系統中 安裝 tomcat, 使用默認端口 8080
進入tomcat 的 bin目錄中, ./startup.sh 啟動
(2)對外開放訪問的端口
firewall-cmd -add-port=8080/tcp --permanent
firewall-cmd -reload
查看開放的端口
firewall-cmd --list-all
保證nginx和tomcat都已經啟動
3、過程解析
問題:百度的域名也是在自己windows下的host文件配置的嗎?
不是。
4、具體實現:
開啟tomcat+nginx
開啟端口或者關閉防火墻
配置nginx中 nginx.conf 以及 hosts 開啟域名重定向
4.ngingx配置實例 2-負載均衡
1、實現效果
(1)瀏覽器地址欄輸入地址,負載均衡平均分配到不同端口
2、準備工作
(1)準備多臺tomcat服務器
(2)配置nginx
PS:
隨著互聯網信息的爆炸性增長,負載均衡(load balance)已經不再是一個很陌生的話題,顧名思義,負載均衡即是將負載分攤到不同的服務單元,既保證服務的可用性,又保證響應足夠快,給用戶很好的體驗。快速增長的訪問量和數據流量催生了各式各樣的負載均衡產品,很多專業的負載均衡硬件提供了很好的功能,但卻價格不菲,這使得負載均衡軟件大受歡迎,nginx就是其中一個,在linux下有Nginx、LVS、Haproxy等等服務可以提供負載均衡服務,而且Nginx提供了幾種分配方式:
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器宕掉,能自動剔除。
2、weight
weight 代表權重,默認為1,權重越高被分配用戶越多。
指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。
3、ip_hash
每個請求按照ip的hash結果進行分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
4、fair(第三方)
按照后端服務器的響應時間來分配請求,相應時間短的優先分配/
5.ngingx配置實例 3-動靜分離
6.ngingx配置高可用集群
7.Nginx原理
總結
以上是生活随笔為你收集整理的Nginx尚硅谷学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python实现《合成孔径雷达成像——算
- 下一篇: Avatar Scaler