前言
因為最近有朋友在問Nginx該怎麼設定,所以就打算來分享一下Nginx的架設方法,順便與各位分享一下我在使用上碰到的問題,所以會再加上一點系統調整的地方。
※本次用途只是簡單的做TCP LoadBalance的功能。
那就開始吧! (・ω´・ )
正題
首先就是CentOS最好用的夥伴
1
| yum install epel-release
|
安裝Nginx
預設開機啟動
啟動Nginx
設定防火牆永久允許HTTP
1 2
| firewall-cmd --permanent --zone=public --add-service=http; firewall-cmd --reload;
|
結束,下課
σ ゚∀ ゚) ゚∀゚)σ
設定
vim /etc/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| user root; worker_processes 8;
error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
worker_rlimit_nofile 41000; events { worker_connections 20000; }
http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; }
include /etc/nginx/tcp.d/*.conf;
|
vim /etc/nginx/tcp.d/example.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| stream {
log_format basic 'source=$remote_addr [$time_local] status=$status session_time=$session_time upstream_addr=$upstream_addr" upstream_connect_time="$upstream_connect_time"';
log_format example '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/access.log basic; error_log /var/log/nginx/error.log warn;
upstream game { least_conn; server 192.168.1.1:15688 ; server 192.168.1.2:15688 ; server 192.168.1.3:15688 ; server 192.168.1.4:15688 ; }
server { listen 12000; proxy_pass game; } } ~
|
Upstream Balancing Algorithm 有以下四種可以選
- (round robin): 預設值。每個server會依序接到新進來的request。
- least_conn: 新的連線總是會被送到有最少active connections的後端。在connection至後端會持續一段時間的時候特別有用。
- ip_hash: 這個平衡演算法依據client IP把request分到不同的server。前三個位元組被用作key去決定那個server要處理此request。結果是client傾向於被同一個server服務,可以幫助保持session一致。
- hash: 此平衡演算主要使用memecached代理。Server依據隨機的hash key被區分。可以是文本,變數或組合。這是唯一須要使用者提供資料作為key。
說明
本次案例僅透過least_conn 來進行loadbalance的調配,所以設定上較為簡單,也沒有針對Buffer做調校,畢竟這類設定還是得依需求調整。
系統調校
vim /etc/sysctl.conf
1 2 3 4 5 6 7 8 9 10
| net.ipv4.ip_forward = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 net.netfilter.nf_conntrack_max=1966080
net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 819200 net.core.netdev_max_backlog = 819200 net.ipv4.ip_local_port_range = 1024 65535
|
vim /etc/security/limits.conf
1 2 3 4 5 6 7
| * soft nofile 65000 * hard nofile 65000 * hard nofile 65535 * soft nofile unlimited * hard nproc unlimited * soft nproc unlimited
|
設定完成記得重開機唷!!
以下是簡單的設定說明,下次再見囉。