摘要:客戶請(qǐng)求頭緩沖大小默認(rèn)會(huì)用這個(gè)來(lái)讀取值,如果設(shè)定通過(guò)上傳文件的大小磁盤和之間互相拷貝數(shù)據(jù)或任意兩個(gè)文件描述符。
環(huán)境說(shuō)明
192.168.1.208 Nginx負(fù)載服務(wù)器 192.168.1.210 webA服務(wù)器 PHP memcache xcache mysql 192.168.1.211 webB服務(wù)器 PHP memcache xcache
webA/webB 服務(wù)器PHP環(huán)境配置
# 注意:freetype在生成驗(yàn)證碼圖片需要用,所以必須要安裝的 [root@iZ23g4snm6gZ soft]# yum install openssl-devel libxml2 libxml2-devel curl-devel libevent [root@iZ23g4snm6gZ soft]# yum install libpng libpng-devel libjpeg libjpeg-devel freetype-devel gd gd-devel mysql-devel # 源碼包安裝libiconv tar zxvf libiconv-1.14.tar.gz cd libiconv-1.14/ ./configure --prefix=/usr/local/libiconv make make install # 源碼包安裝libiconv tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --prefix=/usr/local/libmcrypt/ make make install # 開(kāi)始編譯PHP tar -zxvf php-5.6.3.tar.gz cd php-5.6.3 ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-zlib --with-libxml-dir --enable-sockets --with-curl --with-jpeg-dir --with-png-dir --with-gd --with-iconv-dir=/usr/local/libiconv --with-freetype-dir= --enable-gd-native-ttf --with-xmlrpc --with-openssl --with-mhash --with-mcrypt=/usr/local/libmcrypt/ --with-pear --enable-mbstring --enable-sysvshm --enable-zip --with-mysql --with-mysqli --with-mysql-sock --with-pdo-mysql --disable-fileinfo # 安裝配置 make make install
配置php-fpm.conf文件
#! /bin/sh ### BEGIN INIT INFO # Provides: php-fpm # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO prefix=/usr/local/php exec_prefix=${prefix} php_fpm_BIN=${exec_prefix}/sbin/php-fpm php_fpm_CONF=${prefix}/etc/php-fpm.conf php_fpm_PID=${prefix}/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in "created") if [ -f "$2" ] ; then try="" break fi ;; "removed") if [ ! -f "$2" ] ; then try="" break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-quit" exit 1 else echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac # 開(kāi)機(jī)自啟動(dòng)配置 mv php-fpm /etc/init.d/ // 移動(dòng)php-fpm腳本到init.d目錄下 chmod a+x /etc/init.d/php-fpm // 添加執(zhí)行權(quán)限 chkconfig --add php-fpm // 添加開(kāi)機(jī)啟動(dòng)配置 chkconfig --level 2345 php-fpm on // 配置開(kāi)機(jī)啟動(dòng)權(quán)限級(jí)別
Nginx 服務(wù)器配置安裝
# 擴(kuò)展包安裝 yum install libcom_err pkgconfig -y yum install libselinux krb5-libs libcom_err-devel libsepol-devel libselinux-devel e2fsprogs-libs libss keyutils-libs-devel krb5-devel e2fsprogs libselinux-utils -y yum -y install zlib zlib-devel openssl openssl-devel make gcc gcc-c++ ncurses-devel pcre-devel # 安裝Nginx# 安裝pcre (支持nginx偽靜態(tài)) ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz cd /usr/local/src mkdir /usr/local/pcre // 創(chuàng)建安裝目錄 tar zxvf pcre-8.30.tar.gz cd pcre-8.30 ./configure --prefix=/usr/local/pcre // 配置 make make install # 安裝Nginx [root@admin local]# groupadd www #添加www組 [root@admin local]# useradd -g www www -s /bin/false // 不允許www用戶直接登錄系統(tǒng) wget http://nginx.org/download/nginx-1.8.1.tar.gz tar -zxf /data/soft/nginx/nginx-1.8.1.tar.gz cd /data/soft/nginx/nginx-1.8.1 # 開(kāi)始配置Nginx ./configure --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-ipv6 --with-mail --with-mail_ssl_module --conf-path=/usr/local/nginx/conf/nginx.conf --group=wwww --user=www --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/usr/local/nginx/logs/lock.txt make make install # nginx安裝第三方擴(kuò)展 tar -zxf /data/soft/nginx/ngx_http_accounting_module-master.tar.gz cp -rf ngx_http_accounting_module-master /usr/local/ # 切換到nginx源碼包目錄執(zhí)行 ./configure --prefix=/usr/local/nginx --add-module=/usr/local/ngx_http_accounting_module-master/ make make install
配置nginx支持php
#user nobody; user www www; worker_processes auto; # ginx要開(kāi)啟的進(jìn)程數(shù) 一般等于cpu的總核數(shù),沒(méi)必要開(kāi)那么多,1個(gè)nginx內(nèi)存消耗10兆左右 #worker_processes 4; # 為每個(gè)進(jìn)程分配cpu,上例中將4 個(gè)進(jìn)程分配到4個(gè)cpu,當(dāng)然可以寫多個(gè),或者將一 個(gè)進(jìn)程分配到多個(gè)cpu #worker_cpu_affinity 00000001 00000010 00000100 00001000; # 開(kāi)啟nginx錯(cuò)誤日志 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid logs/nginx.pid; # 每個(gè)nginx進(jìn)程打開(kāi)文件描述符最大數(shù)目 配置要和系統(tǒng)的單進(jìn)程打開(kāi)文件數(shù)一 # 致,linux 2.6內(nèi)核下開(kāi)啟文件打開(kāi)數(shù)為65535,worker_rlimit_nofile就相應(yīng),應(yīng)該填寫65535 # nginx調(diào)度時(shí)分配請(qǐng)求到進(jìn)程并不是那么的均衡,假如超過(guò)會(huì)返回502錯(cuò)誤。我這里寫的大一點(diǎn) worker_rlimit_nofile 819200; events { # 設(shè)置用于復(fù)用客戶端線程的輪詢方法。如果你使用Linux 2.6+,你應(yīng)該使用epoll。 # 如果你使用*BSD,你應(yīng)該使用kqueue。 # 值得注意的是如果你不知道Nginx該使用哪種輪詢方法的話,它會(huì)選擇一個(gè)最適合你操作系統(tǒng)的 use epoll; # 每個(gè)工作進(jìn)程允許最大的同時(shí)連接數(shù)(Maxclient = work_processes * worker_connections) # 默認(rèn)1024 worker_connections 40960; } http { # 打開(kāi)accunting日志分析 http_accounting on; http_accounting_name "JGsrv"; http_accounting_time 30; # 文件頭信息 include mime.types; # 默認(rèn)類型 default_type application/octet-stream; # 限制連接模塊 limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; # 保存服務(wù)器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。 # 參數(shù)hash bucket size總是等于hash表的大小,并且是一路處理器緩存大小的倍數(shù) server_names_hash_bucket_size 128; # 客戶端請(qǐng)求頭部的緩沖區(qū)大小,這個(gè)可以根據(jù)你的系統(tǒng)分頁(yè)大小來(lái)設(shè)置, # 一般一個(gè)請(qǐng)求的頭部大小不會(huì)超過(guò)1k,不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1k, # 所以這里設(shè)置為分頁(yè)大小。分頁(yè)大小可以用命令getconf PAGESIZE取得。 client_header_buffer_size 32k; # 客戶請(qǐng)求頭緩沖大小 # nginx默認(rèn)會(huì)用client_header_buffer_size這個(gè)buffer來(lái)讀取header值,如果 large_client_header_buffers 4 32k; # 設(shè)定通過(guò)nginx上傳文件的大小 client_max_body_size 64m; # 磁盤和TCP socket之間互相拷貝數(shù)據(jù)(或任意兩個(gè)文件描述符)。 # Pre-sendfile是傳送數(shù)據(jù)之前在用戶空間申請(qǐng)數(shù)據(jù)緩沖區(qū) sendfile on; # 告訴nginx在一個(gè)數(shù)據(jù)包里發(fā)送所有頭文件,而不一個(gè)接一個(gè)的發(fā)送 tcp_nopush on; # 告訴nginx不要緩存數(shù)據(jù),而是一段一段的發(fā)送, # 當(dāng)需要及時(shí)發(fā)送數(shù)據(jù)時(shí),就應(yīng)該給應(yīng)用設(shè)置這個(gè)屬性,這樣發(fā)送一小塊數(shù)據(jù)信息時(shí)就不能立即得到返回值。 tcp_nodelay on; # 并不會(huì)讓nginx執(zhí)行的速度更快,但它可以關(guān)閉在錯(cuò)誤頁(yè)面中的nginx版本數(shù)字,這樣對(duì)于安全性是有好處的 server_tokens off; # keepalive超時(shí)時(shí)間 keepalive_timeout 65; # 優(yōu)化fastcgi fastcgi_connect_timeout 120; fastcgi_send_timeout 120; fastcgi_read_timeout 120; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_intercept_errors on; # 開(kāi)啟gzip壓縮 gzip on; # 默認(rèn)值: 0 ,不管頁(yè)面多大都?jí)嚎s gzip_min_length 1k; # 設(shè)置系統(tǒng)獲取幾個(gè)單位的緩存用于存儲(chǔ)gzip的壓縮結(jié)果數(shù)據(jù)流 # 例如 4 4k 代表以4k為單位,按照原始數(shù)據(jù)大小以4k為單位的4倍申請(qǐng)內(nèi)存 gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; # 這個(gè)將為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的,max 指定緩存數(shù)量,建議和打開(kāi)文件數(shù)一致, # inactive 是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存 # open_file_cache max=409600 inactive=10s; # 這個(gè)是指多長(zhǎng)時(shí)間檢查一次緩存的有效信息 # open_file_cache_valid 5s; # open_file_cache 指令中的inactive 參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù), # 如果超過(guò)這個(gè)數(shù)字,文件描述符一直是在緩存中打開(kāi)的, # 如上例,如果有一個(gè)文件在inactive 時(shí)間內(nèi)一次沒(méi)被使用,它將被移除 # open_file_cache_min_uses 2; log_format access_logs "$upstream_response_time $request_time $status $body_bytes_sent $remote_addr $time_local "$http_user_agent" "$request" "$http_referer" "$http_x_forwarded_for""; # Nginx負(fù)載均衡配置 upstream phpServer{ # 服務(wù)器內(nèi)網(wǎng)地址,weight:權(quán)重,負(fù)載越大 max_fails:允許請(qǐng)求失敗的次數(shù) fail_timeout:次失敗后,暫停的時(shí)間 server 172.20.17.210:9000 weight=1 max_fails=2 fail_timeout=3; server 172.20.17.211:9000 weight=1 max_fails=2 fail_timeout=3; } # 配置虛擬主機(jī),過(guò)個(gè)server就復(fù)制多個(gè) include vhost/*.conf; }
Vhost目錄下的虛擬機(jī)配置文件
server { listen 80; server_name jt018.com www.jt018.com; root /data/www/jt018.com/; #access_log logs/host.access.log main; # 配置域名重定向 #if ($host != "www.jt018.com" ) { # rewrite ^/(.*)$ http://www.yphp.cn/$1 permanent; #} location / { # 配置rewrite if (!-e $request_filename) { rewrite ^(.*)$ /index.php?$1 last; break; } # include /usr/local/nginx/html/yphp/.htaccess; # rewrite ^/(.+)/(.+)[/]?$ /index.php?m=$1&a=$2 last; # 配置默認(rèn)訪問(wèn)文件 index index.php index.html index.htm; } # 靜態(tài)文件緩存30天 location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$ { expires 30d; # access_log off; } # js,css文件緩存15個(gè)小時(shí) location ~ .*.(js|css)?$ { expires 15d; # access_log off; } #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; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ .php$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_intercept_errors on; fastcgi_pass phpServer; # 修改為upstream定義的名稱 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Nginx 開(kāi)機(jī)啟動(dòng)配置
#!/bin/bash # nginx This shell script takes care of starting and stopping # nginx # # chkconfig: - 13 68 # description: nginx is a web server ### BEGIN INIT INFO # Provides: $named # Short-Description: start|stop|status|restart|configtest ### END INIT INFO #variables NGINX_BIN="/usr/local/nginx/sbin/nginx" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" NGINX_PID="/usr/local/nginx/logs/nginx.pid" NETSTAT="/bin/netstat" alter=$1 prog=nginx #load system function . /etc/rc.d/init.d/functions #function:echo ok or error function if_no { if [ $2 == 0 ]; then echo -n $"$1 ${prog}:" && success && echo else echo -n $"$1 ${prog}:" && failure && echo fi } #start nginx function start { rm -f ${NGINX_PID} 2>/dev/null if [ -s ${NGINX_PID} ]; then echo "nginx already running" else if [ `${NETSTAT} -tnpl | grep nginx | wc -l` -eq 0 ]; then rm -f ${NGINX_PID} 2>/dev/null ${NGINX_BIN} -c ${NGINX_CONF} if_no start $? else ${NETSTAT} -tnpl | grep nginx | awk "{ print $7}" | cut -d "/" -f 1 > ${NGINX_PID} if_no start $? fi fi } #stp nginx function stop { if [ -s ${NGINX_PID} ]; then cat ${NGINX_PID} | xargs kill -QUIT if_no stop $? else if [ `${NETSTAT} -tnpl | grep nginx | wc -l` -eq 0 ]; then rm -f ${NGINX_PID} 2>/dev/null if_no stop 0 else rm -f ${NGINX_PID} 2>/dev/null kill `${NETSTAT} -tnpl | grep nginx | awk "{ print $7}" | cut -d "/" -f 1` if_no stop $? fi fi } function restart { if [ -s ${NGINX_PID} ]; then cat ${NGINX_PID} | xargs kill -HUP if_no restart $? else stop sleep 1 start fi } function status { ${NETSTAT} -tnpl | grep nginx | grep LISTEN [ $? == 0 ] && echo "nginx is running" || echo "nginx is not running" } function configtest { ${NGINX_BIN} -t } case $alter in start) start ;; stop) stop ;; restart) restart ;; status) status ;; configtest) configtest ;; *) echo "use:${NGINX} {start|stop|restart|status|configtest}" ;; esac # 配置Nginx自啟動(dòng)腳本 chmod +x /etc/init.d/nginx /etc/init.d/nginx start 或 service nginx start // 啟動(dòng)nginx /etc/init.d/nginx stop 或 service nginx stop // 關(guān)閉nginx /etc/init.d/nginx restart 或 service nginx restart // 重啟nginx chkconfig --add nginx chkconfig --level 2345 nginx on # 重啟服務(wù)器 /etc/init.d/nginx stop # 停止nginx 服務(wù) /etc/init.d/nginx start # 啟動(dòng)nginx 服務(wù)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30370.html
摘要:反向代理和負(fù)載均衡通過(guò)判斷不同的,我們可以通過(guò)反向代理轉(zhuǎn)發(fā)到不同的機(jī)器和端口,這里同一臺(tái)測(cè)試機(jī)可以轉(zhuǎn)發(fā)到本機(jī)的不同的端口,監(jiān)聽(tīng)不同的端口設(shè)置不同的網(wǎng)站目錄。 showImg(https://segmentfault.com/img/bVG4E4?w=1328&h=874); 假如我們使用 git 進(jìn)行版本控制,在一個(gè)大型網(wǎng)站中,開(kāi)發(fā)人員在不同的分支上開(kāi)發(fā)不同的需求,當(dāng)一個(gè)需求開(kāi)發(fā)完成需...
摘要:前兩個(gè)數(shù)據(jù)業(yè)務(wù)相關(guān)的服務(wù)即下圖的,第三個(gè)項(xiàng)目就是的實(shí)現(xiàn)的負(fù)載均衡。這里后臺(tái),前臺(tái)項(xiàng)目各啟動(dòng)了三個(gè)實(shí)例,用戶訪問(wèn)的時(shí)候,就會(huì)根據(jù)配置的負(fù)載均衡的策略,訪問(wèn)其中一個(gè)。這一部分與之前我轉(zhuǎn)發(fā)的實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)及網(wǎng)關(guān)其實(shí)也只是差了個(gè)網(wǎng)關(guān)和負(fù)載均衡。 一.簡(jiǎn)介 上一篇只講了博客的前端問(wèn)題,這一篇講一下后端的微服務(wù)搭建。項(xiàng)目的后端使用的thinkjs框架,在我之前的博客中已經(jīng)寫過(guò),這里就不重點(diǎn)說(shuō)明了。后...
摘要:于是乎,,,搜到最多的詞就是均衡負(fù)載,搭配的一般都是。回頭再看看,先換個(gè)瀏覽器首次訪問(wèn)再次訪問(wèn)帶上首次訪問(wèn)帶上再次次訪問(wèn)可見(jiàn)的確是達(dá)到了均衡負(fù)載同時(shí)共享的目的。 前言 大學(xué)三年多,也做個(gè)幾個(gè)網(wǎng)站和APP后端,老是被人問(wèn)到,如果用戶多了服務(wù)器會(huì)不會(huì)掛,總是很尷尬的回答:哈哈,我們的用戶還少,到了服務(wù)器撐不住的時(shí)候,估計(jì)都上市了吧。說(shuō)是這么說(shuō),但是對(duì)于有強(qiáng)迫癥的我,這個(gè)問(wèn)題一直回響在我腦海...
閱讀 2794·2019-08-30 15:53
閱讀 576·2019-08-29 17:22
閱讀 1195·2019-08-29 13:10
閱讀 2365·2019-08-26 13:45
閱讀 2793·2019-08-26 10:46
閱讀 3235·2019-08-26 10:45
閱讀 2553·2019-08-26 10:14
閱讀 512·2019-08-23 18:23