Nginx学习_狂神
Nginx
公司產(chǎn)品出現(xiàn)瓶頸?
我們公司項目剛剛上線的時候,并發(fā)量小,用戶使用的少,所以在低并發(fā)的情況下,一個jar包啟動應用就夠了,然后內(nèi)部tomcat返回內(nèi)容給用戶。
但是慢慢的,使用我們平臺的用戶越來越多了,并發(fā)量慢慢增大了,這時候一臺服務器滿足不了我們的需求了。
于是我們橫向擴展,又增加了服務器。這個時候幾個項目啟動在不同的服務器上,用戶要訪問,就需要增加一個代理服務器了,通過代理服務器來幫我們轉(zhuǎn)發(fā)和處理請求。
我們希望這個代理服務器可以幫助我們接收用戶的請求,然后將用戶的請求按照規(guī)則幫我們轉(zhuǎn)發(fā)到不同的服務器節(jié)點之上。這個過程用戶是無感知的,用戶并不知道是哪個服務器返回的結(jié)果,我們還希望他可以按照服務器的性能提供不同的權重選擇。保證最佳體驗!所以我們使用了Nginx。
什么是Nginx?
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發(fā)的,第一個公開版本0.1.0發(fā)布于2004年10月4日。2011年6月1日,nginx 1.0.4發(fā)布。
其特點是占有內(nèi)存少,并發(fā)能力強,事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。在全球活躍的網(wǎng)站中有12.18%的使用比率,大約為2220萬個網(wǎng)站。
Nginx 是一個安裝非常的簡單、配置文件非常簡潔(還能夠支持perl語法)、Bug非常少的服務。Nginx 啟動特別容易,并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟件版本的升級。
Nginx代碼完全用C語言從頭寫成。官方數(shù)據(jù)測試表明能夠支持高達 50,000 個并發(fā)連接數(shù)的響應。
Nginx作用?
Http代理,反向代理:作為web服務器最常用的功能之一,尤其是反向代理。
正向代理
? 代理客戶端的是正向代理,在本機上安裝
? 比如用vpn訪問外網(wǎng),vpn代理你的電腦,訪問外網(wǎng),再返回給你
反向代理
代理服務器的是反向代理? 比如訪問百度,永遠都是www.bai…,后臺動態(tài)擴容多少服務器,都無法感知
Nginx提供的負載均衡策略有2種:內(nèi)置策略和擴展策略。內(nèi)置策略為輪詢,加權輪詢,Ip hash。擴展策略,就天馬行空,只有你想不到的沒有他做不到的。
輪詢
加權輪詢
? 3服務器比較牛,權重高,大量請求都會來到服務器3
iphash對客戶端請求的ip進行hash操作,然后根據(jù)hash結(jié)果將同一個客戶端ip的請求分發(fā)給同一臺服務器進行處理,可以解決session不共享的問題。
動靜分離,在我們的軟件開發(fā)中,有些請求是需要后臺處理的,有些請求是不需要經(jīng)過后臺處理的(如:css、html、jpg、js等等文件),這些不需要經(jīng)過后臺處理的文件稱為靜態(tài)文件。讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作。提高資源響應的速度。
目前,通過使用Nginx大大提高了我們網(wǎng)站的響應速度,優(yōu)化了用戶體驗,讓網(wǎng)站的健壯性更上一層樓!
Nginx的安裝
windows下安裝
1、下載nginx
http://nginx.org/en/download.html 下載穩(wěn)定版本。
以nginx/Windows-1.16.1為例,直接下載 nginx-1.16.1.zip。
下載后解壓,解壓后如下:
2、啟動nginx
有很多種方法啟動nginx
(1)直接雙擊nginx.exe,雙擊后一個黑色的彈窗一閃而過(不提倡)
(2)打開cmd命令窗口,切換到nginx解壓目錄下,輸入命令 nginx.exe ,回車即可
3、檢查nginx是否啟動成功
直接在瀏覽器地址欄輸入網(wǎng)址 http://localhost:80 回車,出現(xiàn)以下頁面說明啟動成功!
4、配置監(jiān)聽
nginx的配置文件是conf目錄下的nginx.conf,默認配置的nginx監(jiān)聽的端口為80,如果80端口被占用可以修改為未被占用的端口即可。
當我們修改了nginx的配置文件nginx.conf 時,不需要關閉nginx后重新啟動nginx,只需要執(zhí)行命令 nginx -s reload 即可讓改動生效
5、關閉nginx
如果使用cmd命令窗口啟動nginx, 關閉cmd窗口是不能結(jié)束nginx進程的,可使用兩種方法關閉nginx
(1)輸入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
(2)使用taskkill taskkill /f /t /im nginx.exe
taskkill是用來終止進程的, /f是強制終止 . /t終止指定的進程和任何由此啟動的子進程。 /im示指定的進程名稱 .linux下安裝
1、安裝gcc
安裝 nginx 需要先將官網(wǎng)下載的源碼進行編譯,編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:
( 在linux上,gcc是一個很重要的c編譯器。因為linux的源碼包必須通過編譯才能使用。如果沒有gcc的話,就很難辦咯。 )
(yum( Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟件包管理器。 yum提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。僅安裝指定的軟件命令:yum install <package_name>)
yum install gcc-c++ gcc -v 查看gcc是否安裝2、PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發(fā)的一個二次開發(fā)庫。nginx也需要此庫。命令:
yum install -y pcre pcre-devel3、zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內(nèi)容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。
yum install -y zlib zlib-devel4、OpenSSL 安裝
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應用程序供測試或其它目的使用。
nginx 不僅支持 http 協(xié)議,還支持 https(即在ssl協(xié)議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。
5、下載安裝包
手動下載.tar.gz安裝包,地址:https://nginx.org/en/download.html
下載完畢上傳到服務器上 /root
6、解壓
tar -zxvf nginx-1.18.0.tar.gz cd nginx-1.18.07、配置
使用默認配置,在nginx根目錄下執(zhí)行
./configure make make install查找安裝路徑: whereis nginx
Nginx常用命令
cd /usr/local/nginx/sbin/ ./nginx 啟動 ./nginx -s stop 停止 ./nginx -s quit 安全退出 ./nginx -s reload 重新加載配置文件 ps aux|grep nginx 查看nginx進程啟動成功訪問 服務器ip:80
注意:如何連接不上,檢查阿里云安全組是否開放端口,或者服務器防火墻是否開放端口!
相關命令:
演示
//這里的lb隨意起名字,為了后邊使用 upstream lb{ //多臺服務器加一個負載均衡配置//服務器資源server 127.0.0.1:8080 weight=1;server 127.0.0.1:8081 weight=1; }location / {proxy_pass http://lb; //代理 } #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;upstream kuangstudy{ //多臺服務器加一個負載均衡配置//服務器資源server 127.0.0.1:8080 weight=1;server 127.0.0.1:8081 weight=1;} server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;proxy_pass http://kuangstudy; //反向代理} #error_page 404 /404.html;# redirect server error pages to the static page /50x.html.........................................配置文件:conf/nginx.conf
全局配置events {worker_connections 1024; }http {http配置upstream xx{//負載均衡配置}server {listen 80;server_name localhost;//代理location / {proxy_pass http://lb;}}server {listen 443;server_name localhost;//代理}} user www www; worker_processes 2;error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;pid logs/nginx.pid;events { use epoll; worker_connections 2048; }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 65;# gzip壓縮功能設置 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 6; gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; gzip_vary on;# http_proxy 設置 client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 75; proxy_send_timeout 75; proxy_read_timeout 75; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_temp_path /usr/local/nginx/proxy_temp 1 2;# 設定負載均衡后臺服務器列表 upstream backend { #ip_hash; server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ; }# 很重要的虛擬主機配置 server { listen 80; server_name itoatest.example.com; root /apps/oaapp;charset utf-8; access_log logs/host.access.log main;#對 / 所有做負載均衡+反向代理 location / { root /apps/oaapp; index index.jsp index.html index.htm;proxy_pass http://backend; proxy_redirect off; # 后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}#靜態(tài)文件,nginx自己處理,不去backend請求tomcat location ~* /download/ { root /apps/oa/fs;} location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { root /apps/oaapp; expires 7d; } location /nginx_status { stub_status on; access_log off; allow 192.168.10.0/24; deny all; }location ~ ^/(WEB-INF)/ { deny all; } #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; } }## 其它虛擬主機,server 指令開始 }總結(jié)
以上是生活随笔為你收集整理的Nginx学习_狂神的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot jackson配
- 下一篇: python3精要(22)-函数(3)