• (转)Linux+Nginx+Php架设高性能WEB服务器


    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

    本文是W3CGROUP在成功架设Nginx+Php Web服务器之后的一个总结,成功设置Nginx开启多域名多站点,并且不会出现502 Bad Gateway错误!

    本文测试环境如下:

    系统环境

    Linux version 2.6.9(CentOS release 4.7(Final))

    软件环境

    nginx-0.6.35.tar.gz
    当前稳定版: Nginx 0.6.35 (2009年1月26日)
    官方Wiki:http://wiki.nginx.org
    官方下载:http://sysoev.ru/nginx/nginx-0.6.35.tar.gz

    php-5.2.9.tar.gz
    官方下载:http://www.php.net/get/php-5.2.9.tar.gz/from/this/mirror

    php-5.2.9-fpm-0.5.10.diff.gz
    官方下载:http://php-fpm.anight.org/downloads/archive/

    mysql-5.1.34.tar.gz

    libiconv-1.13.tar.gz

    libmcrypt-2.5.8.tar.gz

    mcrypt-2.6.8.tar.gz

    mhash-0.9.9.9.tar.gz

    Nginx0.6.35+Php5.2.9所有相关安装包下载 http://www.w3cgroup.com/code/nginx_php.rar


    安装步骤

    一、 编译安装PHP5.2.9所需的支持库

    tar zxvf libiconv-1.13.tar.gz
    cd libiconv-1.13/
    ./configure --prefix=/usr/local
    make
    make install
    cd ../

    tar zxvf libmcrypt-2.5.8.tar.gz
    cd libmcrypt-2.5.8/
    ./configure
    make
    make install
    /sbin/ldconfig
    cd libltdl/
    ./configure --enable-ltdl-install
    make
    make install
    cd http://www.cnblogs.com/

    tar zxvf mhash-0.9.9.9.tar.gz
    cd mhash-0.9.9.9/
    ./configure
    make
    make install
    cd ../

    ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
    ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
    ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
    ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
    ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
    ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
    ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
    ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
    ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

    tar zxvf mcrypt-2.6.8.tar.gz
    cd mcrypt-2.6.8/
    /sbin/ldconfig
    ./configure
    make
    make install
    cd ../


    二、编译安装MySQL 5.1.34扩展库

    /usr/sbin/groupadd mysql
    /usr/sbin/useradd -g mysql mysql
    tar zxvf mysql-5.1.34.tar.gz
    cd mysql-5.1.34/
    ./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase
    make && make install
    chmod +w /usr/local/webserver/mysql
    chown -R mysql:mysql /usr/local/webserver/mysql
    cd ../

    MySql的安装此处就省略


    三、编译安装PHP(FastCGI模式)

    tar zxvf php-5.2.9.tar.gz
    gzip -cd php-5.2.9-fpm-0.5.10.diff.gz | patch -d php-5.2.9 -p1
    cd php-5.2.9/
    ./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl
    make ZEND_EXTRA_LIBS='-liconv'
    make install
    cp php.ini-dist /usr/local/webserver/php/etc/php.ini
    cd ../


    四、修改php-fpm配置文件

    rm -f /usr/local/webserver/php/etc/php-fpm.conf
    vi /usr/local/webserver/php/etc/php-fpm.conf

    输入以下内容:

    <?xml version="1.0" ?> 
    <configuration> 
    <section name="global_options"> 
    <value name="pid_file">/usr/local/webserver/php/logs/php-fpm.pid</value> 
    <value name="error_log">/usr/local/webserver/php/logs/php-fpm.log</value> 
    <value name="log_level">notice</value> 
    <value name="emergency_restart_threshold">10</value> 
    <value name="emergency_restart_interval">1m</value> 
    <value name="process_control_timeout">5s</value> 
    <value name="daemonize">yes</value> 
    </section> 
    <workers> 
    <section name="pool"> 
    <value name="name">default</value> 
    <value name="listen_address">127.0.0.1:9000</value> 
    <value name="listen_options"> 
    <value name="backlog">-1</value> 
    <value name="owner"></value> 
    <value name="group"></value> 
    <value name="mode">0666</value> 
    </value> 
    <value name="php_defines"> 
    <value name="sendmail_path">/usr/sbin/sendmail -t -i</value> 
    <value name="display_errors">1</value> 
    </value> 
    <value name="user">www</value> 
    <value name="group">www</value> 
    <value name="pm"> 
    <value name="style">static</value> 
    <value name="max_children">128</value> 
    <value name="apache_like"> 
    <value name="StartServers">20</value> 
    <value name="MinSpareServers">5</value> 
    <value name="MaxSpareServers">35</value> 
    </value> 
    </value> 
    <value name="request_terminate_timeout">0s</value> 
    <value name="request_slowlog_timeout">0s</value> 
    <value name="slowlog">logs/slow.log</value> 
    <value name="rlimit_files">51200</value> 
    <value name="rlimit_core">0</value> 
    <value name="chroot"></value> 
    <value name="chdir"></value> 
    <value name="catch_workers_output">yes</value> 
    <value name="max_requests">500</value> 
    <value name="allowed_clients">127.0.0.1</value> 
    <value name="environment"> 
    <value name="HOSTNAME">$HOSTNAME</value> 
    <value name="PATH">/usr/local/bin:/usr/bin:/bin</value> 
    <value name="TMP">/tmp</value> 
    <value name="TMPDIR">/tmp</value> 
    <value name="TEMP">/tmp</value> 
    <value name="OSTYPE">$OSTYPE</value> 
    <value name="MACHTYPE">$MACHTYPE</value> 
    <value name="MALLOC_CHECK_">2</value> 
    </value> 
    </section> 
    </workers> 
    </configuration>

    五、创建www用户组及www用户

    /usr/sbin/groupadd www
    /usr/sbin/useradd -g www www


    六、编译安装Nginx

    tar zxvf nginx-0.6.35.tar.gz
    cd nginx-0.6.35/
    默认安装:
    ./configure
    make && make install
    默认情况下,Nginx 会被安装在 /usr/local/nginx。通过设定编译选项,你可以改变这个设定。

    指定编译选项安装,如:
    ./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
    make && make install
    cd ../

    七、创建fcgi.conf文件

    rm -f /usr/local/webserver/nginx/conf/fcgi.conf
    vi /usr/local/webserver/nginx/conf/fcgi.conf

    输入以下内容:

    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
    fastcgi_param SERVER_SOFTWARE nginx;

    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_param REQUEST_URI $request_uri;
    fastcgi_param DOCUMENT_URI $document_uri;
    fastcgi_param DOCUMENT_ROOT $document_root;
    fastcgi_param SERVER_PROTOCOL $server_protocol;

    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param REMOTE_PORT $remote_port;
    fastcgi_param SERVER_ADDR $server_addr;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;

    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param REDIRECT_STATUS 200;


    八、编辑Nginx配置文件

    rm -f /usr/local/webserver/nginx/conf/nginx.conf
    vi /usr/local/webserver/nginx/conf/nginx.conf

    输入以下内容:

    user www www;
    worker_processes 8;
    error_log /usr/local/webserver/nginx/logs/logs/nginx_error.log crit;
    pid /usr/local/webserver/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;
    events {
    use epoll;
    worker_connections 51200;
    }

    http {
    include mime.types;
    default_type application/octet-stream;
    charset utf-8;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 60;
    tcp_nodelay on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 8 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

    gzip on;
    gzip_min_length 1k;
    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;

    #limit_zone crawler $binary_remote_addr 10m;
    #多个站点设置,站点文件夹必须放在Nginx的html目录,否则不支持多站点
    server {
    listen 80;
    server_name www.v-ec.com;
    root /usr/local/webserver/nginx/html/www.v-ec.com;
    index index.php index.html;

    location ~ .*\.(php|php5)?$ { 
    #fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fcgi.conf;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    expires 30d;
    }

    location ~ .*\.(js|css)?$ {
    expires 6h;
    }

    log_format veclog '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
    access_log logs/vec.log veclog;
    }
    #多个站点设置,站点文件夹必须放在Nginx的html目录,否则不支持多站点
    server {
    listen 80;
    server_name www.w3cgroup.com;
    root /usr/local/webserver/nginx/html/www.w3cgroup.com;
    index index.php index.html;

    location ~ .*\.(php|php5)?$ { 
    #fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fcgi.conf;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    expires 30d;
    }

    location ~ .*\.(js|css)?$ {
    expires 6h;
    }

    log_format w3cclog '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
    access_log logs/w3c.log w3clog;
    }
    }

    九、配置开机自动启动Nginx + PHP

    vi /etc/rc.local

    在末尾增加以下内容:

    ulimit -SHn 51200
    /usr/local/webserver/php/sbin/php-fpm start
    /usr/local/webserver/nginx/sbin/nginx


    十、优化Linux内核参数

    vi /etc/sysctl.conf

    在末尾增加以下内容:

    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1

    使配置立即生效:

    /sbin/sysctl –p

    做到这里,可以reboot重启Linux了,不出意外的话应该可以顺利开启Nginx

    平滑重启Nginx

    Ps aux | grep nginx
    找到Nginx的master process,假如为:5800,然后kill
    Kill –HUP 5800

    平滑重启Php

    /usr/local/webserver/php/sbin/php-fpm restart

    php-fpm的其他命令:start | stop | quit | restart | reload | logrotate

    本文为w3c group成功测试Nginx+php结果之总结,希望可以帮助到其他在尝试使用Nginx+Php的朋友!原创文章,转载请注明出处!

  • 相关阅读:
    513. Find Bottom Left Tree Value(LeetCode)
    647. Palindromic Substrings(LeetCode)
    537. Complex Number Multiplication(LeetCode)
    338. Counting Bits(LeetCode)
    190. Reverse Bits(leetcode)
    Java多线程核心技术
    正则表达式
    linux 怎么把^M去掉
    分片与分区的区别
    《MYSQL技术精粹》读书笔记
  • 原文地址:https://www.cnblogs.com/qlight/p/1611232.html
Copyright © 2020-2023  润新知