nginx牛逼tomcat弱雞探索之道
- 2019 年 10 月 6 日
- 筆記
nginx牛逼解密
- 序言
- 安裝
- 反向代理
- 靜態資源伺服器
- nginx vs tomcat壓測對比
- 並髮結果對比
- 對伺服器影響對比
- 說在後面的話
- 並髮結果對比
- 對伺服器影響對比
序言

對於常用的伺服器,大家可能更多的知道apache,tomcat,lls等伺服器。我們跟多的了解到nginx常常用於反向代理。而實質是nginx也是一個高性能伺服器。常用於前端頁面資源靜態化和負載均衡的反向代理。
下面就由部落客帶你認識nginx。以及nginx的反向代理、資源靜態化,和壓測對比。
安裝
筆者環境是ubuntu18.04.所以下載東西是非常簡單。centos 的yum源也有nginx。對於window。直接下載使用即可。
- nginx 下載:
sudo apt get nginx
- jmeter 下載 官網自行安裝 解壓完(
sudo chomd -R 777 apache-jmeter-5.1.1
)
這樣,一些基本的工具就下載完成啦。直接nginx或者sudo nginx訪問localhost
就有hello nginx 就是安裝成功,對於jmeter 如果安裝可以到官網進行安裝。
對於nginx安裝後的一些路徑,都在
- 所有的配置文件都在/etc/nginx下
- 程式文件在/usr/sbin/nginx
- 日誌放在了/var/log/nginx中
- 並已經在/etc/init.d/下創建了啟動腳本nginx
還有nginx的一些常用關閉命令
- nginx -s reload :修改配置後重新載入生效
- nginx -s reopen :重新打開日誌文件
- 關閉nginx: nginx -s stop :快速停止nginx quit :完整有序的停止nginx
- 其他的停止nginx 方式: ps -ef | grep nginx kill -9 xxx
如果許可權不足記得加上sudo
反向代理

對於nginx,很多人用nginx+tomcat做負載均衡。提高系統並發量。 對於nginx的配置文件,在/etc/nginx/conf.d/
下新建proxy.conf
(也可以在nginx/nginx.conf中配置) 就比如我想用我本地8081埠代理到本地的nginx上
upstream tomcat-server{ server 47.100.58.250:8080 ; } server{ listen 8081; server_name localhost; location / { proxy_pass http://tomcat-server; root html; index index.html; } }
對於nginx/nginx.conf我進行了修改去掉一些暫時用不到的。
user root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { 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 /var/log/nginx/access.log main; client_max_body_size 20m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; }
這樣,你在本地就可以代理訪問伺服器地址http://localhost:8081/ 當然,如果有多個server可以在upstream中進行配置,還可配置各個節點的權重等等。具體就不介紹了。

靜態資源伺服器
在前後端分離流行的當今。nginx被許多前端愛好者接受。通過nginx能夠簡單的將靜態資源部署,從而達到動靜分離的效果。

nginx配置靜態資源伺服器很簡單 在上述同級文件conf.d/下新建static.conf
server { listen 8082; server_name localhost; location / { root /home/tomcat9/webapps/ROOT/; autoindex on; } }
其中root為tomcat的絕對路徑(可以隨便配置),我事先對tomcat的首頁的index.jsp跑起來存成index.html文件。
那麼現在我們已經完成兩件事
:8081埠負載均衡(反向代理到我伺服器)
,8082埠製成本地tomcat的靜態文件伺服器
。
那麼開啟tomcat。左面是nginx做伺服器返回靜態

nginx vs tomcat壓測對比
並髮結果對比
- 我們先前下載的jmeter可以上場了。針對同一個靜態頁面。nginx路徑為http://localhost:8082/,tomcat為http://localhost:8080/.
- 添加執行緒組。先測試15000個執行緒1s內同時請求主頁。執行緒組中添加http請求。ip:localhost。port:8080 在添加->監聽器添加自己喜歡數據格式(需要qps的可以找插件)
- 對比 其中tomcat,最大qps2400左右

而nginx的結果明顯要強,最大qps3000左右

對伺服器影響對比
- 當20000個並發10s內請求時候。附上完成時的cpu狀況 tomcat cpu達到21.6%。記憶體站到6.4%,也就是隨著並發tomcat對伺服器的cpu和記憶體造成不小壓力

而nginx在壓測過程中記憶體幾乎沒變化,幾乎不吃記憶體。而cpu佔用也比tomcat少。

測壓總結:
指標 |
nginx |
tomcat |
---|---|---|
響應中位數 |
0ms |
1ms |
前95%響應時間 |
4 |
5 |
前99%響應時間 |
7 |
16 |
qps(觀察) |
3000 |
2400 |
對記憶體影響 |
0% |
6.4% |
對cpu影響 |
14% |
21.6% |
其他 |
輕便強大 |
java吃點記憶體、速度慢點 |
(測量環境相對統一)
說在後面的話
通過系列對比,發現nginx的強大之處。負載均衡和靜態資源伺服器能夠為並發減輕壓力。而nginx的學問依然很多。還需要細細研究才行。並且nginx的牛B之處遠不止這些,還需要深入學習才行!