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