nginx 负载均衡搭建-linux安全运维_跨零代码

跨零代码为大家提供高品质的运维解决方案,请大家多多来访,跨零不胜感激,在此谢过。

环境说明

192.168.1.208    Nginx负载服务器 192.168.1.210    webA服务器 PHP memcache xcache mysql 192.168.1.211    webB服务器 PHP memcache xcache 

webA/webB 服务器PHP环境配置

# 注意:freetype在生成验证码图片需要用,所以必须要安装的 [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  # 开始编译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文件

cp php.ini-production  /usr/local/php/etc/php.ini  # 添加用户和用户组 [root@admin local]# groupadd  www  #添加www组 [root@admin local]# useradd -g  www www -s /bin/false  // 不允许www用户直接登录系统  # 拷贝模板文件为php-fpm配置文件 cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf vi /usr/local/php/etc/php-fpm.conf     // 编辑 user = www                             // 设置php-fpm运行账号为www  默认账号为nginx group = www                            // 设置php-fpm运行组为www pid = run/php-fpm.pid                  // 取消前面的分号 listen = 127.0.0.1:9000 改 listen = 0.0.0.0:9000   # 开启opcache缓存 vim /usr/local/php/etc/php.ini    [opcache] zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=2018 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=20000 opcache.revalidate_freq=10 opcache.fast_shutdown=1 opcache.optimization_level=1 ;opcache.max_wasted_percentage=5 ;opcache.use_cwd=1 ;opcache.validate_timestamps=1 ;opcache.revalidate_path=0 ;opcache.save_comments=1 ;opcache.load_comments=1 ;opcache.enable_file_override=0 ;opcache.inherited_hack=1 ;opcache.dups_fix=0 ;opcache.blacklist_filename= ;opcache.max_file_size=0 ;opcache.consistency_checks=0 ;opcache.force_restart_timeout=180 ;opcache.error_log= ;opcache.log_verbosity_level=1 ;opcache.preferred_memory_model= ;opcache.protect_memory=0   # 保存退出 :wq! 

php-fpm开机自启动配置

#! /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  # 开机自启动配置 mv php-fpm /etc/init.d/               // 移动php-fpm脚本到init.d目录下 chmod a+x /etc/init.d/php-fpm         // 添加执行权限 chkconfig --add php-fpm               // 添加开机启动配置 chkconfig --level 2345 php-fpm on     // 配置开机启动权限级别 

Nginx 服务器配置安装

# 扩展包安装 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伪静态) ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz cd /usr/local/src mkdir /usr/local/pcre                  // 创建安装目录 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用户直接登录系统  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  # 开始配置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安装第三方扩展 tar -zxf /data/soft/nginx/ngx_http_accounting_module-master.tar.gz cp -rf ngx_http_accounting_module-master /usr/local/ # 切换到nginx源码包目录执行 ./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要开启的进程数 一般等于cpu的总核数,没必要开那么多,1个nginx内存消耗10兆左右 #worker_processes       4; # 为每个进程分配cpu,上例中将4 个进程分配到4个cpu,当然可以写多个,或者将一 个进程分配到多个cpu #worker_cpu_affinity    00000001 00000010 00000100 00001000;  # 开启nginx错误日志 error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error.log  info;  pid        logs/nginx.pid;  # 每个nginx进程打开文件描述符最大数目 配置要和系统的单进程打开文件数一 # 致,linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应,应该填写65535   # nginx调度时分配请求到进程并不是那么的均衡,假如超过会返回502错误。我这里写的大一点 worker_rlimit_nofile   819200;   events {     # 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。     # 如果你使用*BSD,你应该使用kqueue。     # 值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的     use                            epoll;      # 每个工作进程允许最大的同时连接数(Maxclient = work_processes * worker_connections)     # 默认1024     worker_connections             40960; }   http {     # 打开accunting日志分析     http_accounting                on;     http_accounting_name           "JGsrv";     http_accounting_time           30;      # 文件头信息     include       mime.types;      # 默认类型     default_type  application/octet-stream;      # 限制连接模块     limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;       # 保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。     # 参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数     server_names_hash_bucket_size  128;      # 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,     # 一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,     # 所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。     client_header_buffer_size      32k;      # 客户请求头缓冲大小     # nginx默认会用client_header_buffer_size这个buffer来读取header值,如果     large_client_header_buffers    4 32k;      # 设定通过nginx上传文件的大小     client_max_body_size           64m;      # 磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。     # Pre-sendfile是传送数据之前在用户空间申请数据缓冲区     sendfile                       on;      # 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送     tcp_nopush                     on;          # 告诉nginx不要缓存数据,而是一段一段的发送,     # 当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。     tcp_nodelay                    on;      # 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的     server_tokens                  off;      # keepalive超时时间     keepalive_timeout              65;      # 优化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;      # 开启gzip压缩     gzip                           on;      # 默认值: 0 ,不管页面多大都压缩     gzip_min_length                1k;      # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流     # 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存     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;       # 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,     # inactive 是指经过多长时间文件没被请求后删除缓存 #    open_file_cache                max=409600 inactive=10s;      # 这个是指多长时间检查一次缓存的有效信息 #    open_file_cache_valid          5s;      # open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,     # 如果超过这个数字,文件描述符一直是在缓存中打开的,     # 如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除 #    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负载均衡配置     upstream phpServer{         # 服务器内网地址,weight:权重,负载越大   max_fails:允许请求失败的次数   fail_timeout:次失败后,暂停的时间         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;     }       # 配置虚拟主机,过个server就复制多个     include vhost/*.conf;   } 

Vhost目录下的虚拟机配置文件

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;          # 配置默认访问文件         index  index.php index.html index.htm;     }       # 静态文件缓存30天     location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|ico)$     {         expires 30d;         # access_log off;     }          # js,css文件缓存15个小时     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 开机启动配置

#!/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自启动脚本 chmod +x /etc/init.d/nginx /etc/init.d/nginx start 或 service nginx start         // 启动nginx /etc/init.d/nginx stop 或 service nginx stop          // 关闭nginx /etc/init.d/nginx restart 或 service nginx restart       // 重启nginx chkconfig --add nginx chkconfig --level 2345 nginx on  # 重启服务器 /etc/init.d/nginx stop         # 停止nginx 服务 /etc/init.d/nginx start        # 启动nginx 服务 

以下扩展配置自行安装使用

AB测试与centos系统优化

配置Memcache缓存

Memcache配置地址

配置Xcache代码缓存

xcache缓存配置地址


//下面这个css和插件后台设置的主题有关系,如果需要换样式,则需要修改以下CSS名称

从零到一,创造未来!跨零代码综合IT问题解决服务站,欢迎你的到来。运维教程 只为你绽放。

本文固定链接: http://kua0.com/2019/02/04/nginx-负载均衡搭建-linux安全运维_跨零代码/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注