Nginx負載均衡+代理+ssl+壓力測試

来源:https://www.cnblogs.com/jay-fred/archive/2018/11/14/9956273.html
-Advertisement-
Play Games

一、Tomcat安裝 1.下載jdk,Tomcat,解壓到/usr/local/ 2.配置jdk環境:# vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8.0_171 export PATH=$JAVA_HOME/bin:$PATH export ...


一、Tomcat安裝
1.下載jdk,Tomcat,解壓到/usr/local/
2.配置jdk環境:

1 # vim /etc/profile
2       export JAVA_HOME=/usr/local/jdk1.8.0_171
3       export PATH=$JAVA_HOME/bin:$PATH
4       export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

 

 


3.修改Tomcat首頁:

# cd /usr/local/apache-tomcat-8.0.1/webapps/
# rm -rf !(ROOT)
# rm -rf ROOT/*
# echo "192.168.11.199" >ROOT/index.html

 

4.啟動Tomcat

二、nginx安裝
1.下載源碼包,解壓到/usr/local/
2.安裝編譯依賴:

1 # yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel


3.編譯:

1 # ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --with-http_ssl_module


4.安裝:

1 # make && make install


5.啟動:

1 # nginx

 

 

三、負載均衡
1.ssl認證
  私鑰:

1 # openssl genrsa -des3 -out jason.key 1024

 

  數字證書:

1  # openssl req -new -key jason.key -out jason.csr

 

  去除訪問密碼:

1 # openssl rsa -in jason.key -out jason-np.key


  公鑰:

1 # openssl x509 -req -days 366 -in jason.csr -signkey jason-np.key -out jason.crt

 


2.修改nginx配置文件:

 1 # vim /opt/nginx/conf/nginx.conf
 2   #全局配置
 3   worker_processes 1;
 4   pid /var/run/nginx.pid;
 5   worker_rlimit_nofile 65535;
 6 
 7   #events配置
 8   events {
 9   use epoll;
10   accept_mutex on;
11   multi_accept on;
12   worker_connections 1024;
13   }
14 
15   #HTTP配置
16   http {
17   include mime.types;
18   default_type application/octet-stream;
19   sendfile on;
20   keepalive_timeout 65;
21   tcp_nopush on;
22   tcp_nodelay on;
23   client_header_buffer_size 32k;
24   large_client_header_buffers 4 64k;
25   client_max_body_size 8m;
26   proxy_cache_key '$host:$server_port$request_uri';
27   proxy_temp_file_write_size 64k;
28   proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
29   fastcgi_connect_timeout 300;
30   fastcgi_send_timeout 300;
31   fastcgi_read_timeout 300;
32   fastcgi_buffer_size 64k;
33   fastcgi_buffers 4 64k;
34   fastcgi_busy_buffers_size 128k;
35   fastcgi_temp_file_write_size 128k;
36   fastcgi_intercept_errors on;    #開啟錯誤頁面
37   log_format main '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; '
38   '$status $body_bytes_sent "$http_referer" - $request_body'
39   '"$http_user_agent" "$http_x_forwarded_for"';        #設置日誌輸出格式
40   error_log /var/log/nginx/error.log;
41   access_log /var/log/nginx/access.log main;            #成功日誌格式調用log_format
42   gzip on;              #開啟頁面壓縮,提高頁面打開速度
43   gzip_min_length 1k;
44   gzip_buffers 16 64K;
45   gzip_http_version 1.1;
46   gzip_comp_level 6;
47   gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
48   gzip_vary on;
49 
50 
51   upstream tomcat_server
52   {
53   server 192.168.11.199:8080 weight=1;
54   server 192.168.11.196:8080 weight=2;
55   }
56 
57   server
58   {
59   listen 443;
60   server_name 192.168.11.199;
61   ssl on;
62   ssl_certificate /opt/nginx/ssl/nginx.crt;              #公鑰
63   ssl_certificate_key /opt/nginx/ssl/nginx.key;        #私鑰
64   ssl_session_timeout 5m;
65 
66   location /
67   { proxy_pass http://tomcat_server; }              #負載
68   }
69 
70   server
71   {
72   listen 70;
73   root html;
74   index index.html index.htm;
75 
76   }
77 
78   server
79   {
80   listen 71;
81   root html;
82   index index.html;
83   error_page 404 = /404.html;    
84   error_page 500 502 503 504 = /50x.html;
85   }
86   }

 

 3.編寫日誌分割腳本

  

 1 #!/bin/bash
 2 #此腳本用於自動分割Nginx的日誌,包括access.log和error.log
 3 #每天00:00執行此腳本 將前一天的access.log重命名為access-xxxx-xx-xx.log格式,並重新打開日誌文件
 4 #Nginx日誌文件所在目錄
 5 LOG_PATH=/var/log/nginx/
 6 #獲取昨天的日期
 7 YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
 8 #獲取pid文件路徑
 9 PID=/var/run/nginx.pid
10 #分割日誌
11 mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
12 mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log
13 #向Nginx主進程發送USR1信號,重新打開日誌文件
14 kill -USR1 `cat ${PID}`
15 chmod +x /opt/nginx/conf/log_cut.sh

 

 4.相關測試

  1.gzip壓縮測試:

1 # curl -I -H "Accept-Encoding: gzip, deflate" "192.168.11.199"

 


  2.nginx版本號:F12查看頁面

 


3.日誌分割:

1 # ll /var/log/nginx

 


4.日誌輸出格式:

1 # tail -f /var/log/nginx/access-2018-11-13.log

 

 

5.錯誤頁面:

1 http://192.168.11.199:71/djkf

 



5.壓力測試(ApacheBench):

 1 # yum -y install httpd-tools
 2   關閉ssl認證測試:
 3   # ab -c 500 -n 20000 http://192.168.11.199:80/index.html #一次5000併發,請求總數為200000
 4   Concurrency Level: 500            #一次請求量
 5   Time taken for tests: 10.484 seconds            #耗時
 6   Complete requests: 20000    #完成請求
 7   Failed requests: 6666            #請求失敗
 8 
 9  
10 
11   開啟ssl認證測試:
12   # ab -c 500 -n 20000 https://192.168.11.199:443/index.html
13   Concurrency Level: 500
14   Time taken for tests: 27.011 seconds
15   Complete requests: 20000
16   Failed requests: 6667

 

6.nginx調優:

1   worker_rlimit_nofile 65535;         #文件打開數量
2   worker_connections 65535;          #單個進程最大連接數
3   sendfile on;                  #開啟高效文件傳輸模式
4   tcp_nopush on;                 #防止網路阻塞
5   fastcgi_connect_timeout 600;        #指定連接到後端FastCGI的超時時間。
6   fastcgi_send_timeout 600;          #向FastCGI傳送請求的超時時間。
7   fastcgi_read_timeout 600;          #指定接收FastCGI應答的超時時間。

 



7..系統層面
  文件資源限制的配置:

1 # vim /etc/security/limits.conf 
2     * soft nofile 65535
3     * hard nofile 65535
4     * soft noproc 65535
5     * hard noproc 65535

 

 

#logout重新登錄查看

1 # ulimit -n

 

 

2.內核參數:

 1 # vim /etc/sysctl.conf    
 2   net.ipv4.ip_forward = 0            #出現禁用 IPv4 包轉送
 3   net.ipv4.conf.default.rp_filter = 1        #源路由核查功能
 4   net.ipv4.conf.default.accept_source_route = 0      #禁用所有IP源路由
 5   kernel.sysrq = 0                #禁用SysRq(組合鍵)功能
 6   kernel.core_uses_pid = 1            #控制core文件的文件名中是否添加pid作為擴展
 7   net.ipv4.tcp_syncookies = 1        //這四行標紅內容,一般是發現大量TIME_WAIT時的解決辦法
 8   kernel.msgmnb = 65536          #每個消息隊列的最大位元組限制。
 9   kernel.msgmax = 65536          #整個系統的最大數量的消息隊列
10   kernel.shmmax = 68719476736              #定義單個共用記憶體段的最大值
11   kernel.shmall = 4294967296              #控制共用記憶體頁數
12   net.ipv4.tcp_max_tw_buckets = 6000    
13   net.ipv4.tcp_sack = 1            #啟用有選擇的應答
14   net.ipv4.tcp_window_scaling = 1              #設置tcp/ip會話的滑動視窗大小是否可變
15   net.ipv4.tcp_rmem = 4096 87380 4194304              #為每個TCP連接分配的讀、寫緩衝區記憶體大小
16   net.ipv4.tcp_wmem = 4096 16384 4194304              #為每個TCP連接分配的讀、寫緩衝區記憶體大小
17   net.core.wmem_default = 8388608          # 發送套接字緩衝區大小的預設值
18   net.core.rmem_default = 8388608              #接收套接字緩衝區大小的預設值
19   net.core.rmem_max = 16777216
20   net.core.wmem_max = 16777216
21   net.core.netdev_max_backlog = 262144            #每個網路介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目
22   net.core.somaxconn = 262144
23   net.ipv4.tcp_max_orphans = 3276800
24   net.ipv4.tcp_max_syn_backlog = 262144
25   net.ipv4.tcp_timestamps = 1       //#開啟TCP時間戳,這個選擇最好加上
26   net.ipv4.tcp_synack_retries = 1              #服務端收到sys,還未發出syn+ack 
27   net.ipv4.tcp_syn_retries = 1
28   net.ipv4.tcp_tw_recycle = 1       //開啟此功能可以減少TIME-WAIT狀態,但是NAT網路模式下打開有可能會導致tcp連接錯誤,慎重。
29   net.ipv4.tcp_tw_reuse = 1
30   net.ipv4.tcp_mem = 94500000 915000000 927000000
31   net.ipv4.tcp_fin_timeout = 30
32   net.ipv4.tcp_keepalive_time = 30
33   net.ipv4.ip_local_port_range = 1024 65000
34   net.ipv4.ip_conntrack_max = 6553500
35 # sysctl -p

 


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

-Advertisement-
Play Games
更多相關文章
  • 一、命令簡介 grep 命令用於在文本中執行關鍵詞搜索,並顯示匹配的結果。 由於grep命令參數很多,這裡只列出一些常用的參數。 參數 作用 -b 將可執行文件當作文本文件來搜索 -c 僅顯示找到的行數 -i 忽略大小寫 -v 顯示行號 -n 反選(列出沒有關鍵詞的行) 二、實例 這裡我們來練習下如 ...
  • Linux執行腳本有兩種方式,主要區別在於是否建立子shell 1、像sh,bash,./命令是用來執行shell腳本的,在bash/sh命令下,腳本文件可以無"執行許可權",即沒有rwx中的x許可權。而對於./命令,腳本文件必須要有執行許可權。<!--5f39ae17-8c62-4a45-bc43-b3 ...
  • 1、準備工作 1.1 環境 centos7、jdk8、mysql5.7、python2.7、CDH6 1.2文件下載 1.2.1 cloudmanger地址 https://archive.cloudera.com/cm6/6.0.0/redhat7/yum/RPMS/x86_64/ clouder ...
  • 1 #!/bin/bash 2 # coding: utf-8 3 # Copyright (c) 2018 4 set -e #返回值為0時,退出腳本 5 echo "1. 備份yum" 6 { 7 for i in /etc/yum.repos.d/*.repo;do cp $i ${i%.re ...
  • 歡迎大家前往 "騰訊雲+社區" ,獲取更多騰訊海量技術實踐乾貨哦~ 本文由 "[amc" ](https://cloud.tencent.com/developer/user/1024461?fromSource=waitui)發表於 "雲+社區專欄" 在 C 語言的動態申請記憶體技術中,相比起 /` ...
  • Linux下find命令在目錄結構中搜索文件,並執行指定的操作。Linux下find命令提供了相當多的查找條件,功能很強大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來瞭解一下。即使系統中含有網路文件系統( NFS),find命令在該文件系統中同樣有效,只你具有相 ...
  • 1 #!/bin/bash 2 # coding: utf-8 3 # Copyright (c) 2018 4 5 set -e #返回值為非0時,退出腳本 6 7 echo "0. 系統的一些配置" 8 setenforce 0 || true 9 systemctl stop iptables... ...
  • 我一直比較推薦一些Linux新手使用Deepin Linux,因為我認為這種儘量的follow Windows的系統至少對於新手來說是比較的友好的,而且預裝了QQ 火狐瀏覽器中文版,甚至還移植了像360安全瀏覽器這些,自帶的應用商店等等,去掉了很多至少對於一般的Linux用戶,初學者這些用不到的組件 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...