CentOS上如何把Web服务器从Apache换到Nginx

    先前有一篇文章是写如何通过nginx实现反向代理。但当时出现了一个问题,就是我原先centos上面装的opache由于端口原因必须停掉。并且/的配置使路由转发出现了问题。导致我以前的php网站都不能访问。今天把这个问题解决了并记录。


    先学习几个概念

    反向代理是什么

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。


    Nginx和Apache的区别与联系

    Nginx是一个高性能的HTTP服务器和反向代理服务器,最大的优点是节省资源。适用于处理高并发的请求。

    1. Nginx最初是按照反向代理设计的,和Apache不同, nginx关心如何处理url,而不是文件!
    2. Apache是基于进程处理的web服务器,Nginx是基于事件(event)的异步处理模式。
    3. Nginx比较适合来处理静态文件和资源。Apache虽然占用内存多了点,性能上稍逊,但一直比较稳健。适用于处理动态文件。

    Apache 是个基于进程处理的web服务器,如果同时有多个请求,必须要启动多个进程来处理。 这样在高负载的情况下,资源的消耗和响应的速度都会有很大的问题。 而Nginx是个基于事件(event)的异步处理模式, 下面是Nginx的一个简单的示意图,有一个Master进程,Maste进程负责系统配置,管理socket,以及管理一个或是多个Worker进程。 而Worker进程接收和处理来自用户(浏览器)的请求。一般来讲,一个worker进程可以同时处理上千个用户的连接请求。每个worker进程采用异步的,基于event的方式来处理用户的请求。对于HTML的静态页面,Nginx会自行来处理,但对于PHP,JSP, Python等动态页面,Nginx是通过FastCGI(或者SCGI,UWSGI)来把动态页面的请求交给相应的处理程序来处理。

    Nginx事件异步处理模式


    安装和配置

    安装nginx

    这里安装nginx上一篇文章讲了。有一点要注意和提醒的:在CentOS的YUM的基础的容器中,并没有nginx和php-fpm的RPM包。这两个RMP包在epel的容器中, 虽然可以从官网下载RPM包来安装,但如果你的CentOS/Redhat中没有加入YUM的epel容器,还是先把这个yum容器加上去比较好,以后可以省无数的折腾。


    安装php-fpm

    刚刚说了Nginx是通过FastCGI来把动态页面的请求交给相应的处理程序来处理。PHP-FPM (PHP-FastCGI Process Manager) 是目前最常用的一个PHP FastCGI的实现。通俗的讲,这个模块在Nginx和PHP之间桥梁,使之可以互相通信和交换。

    1
    2
    3
    yum install php-fpm
    /etc/init.d/php-fpm start
    chkconfig php-fpm on

    安装好后来确认是否nginx和php-fpm安装正确。使用netstat tunlp命令。查看端口监听情况。

    查看端口


    配置default.conf文件使nginx可解析php文件

    配置文件最后如下:路由为/时是反向代理。如果所有的文件我都放在html目录下。那么当我访问里面的多个网站时,都必须在conf文件里配置一下路由,比如下面的/images目录等。所以我专门建立了一个web目录,用来放我所有的php站点。fastcgi监听9000端口。

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    server {
    listen 80;
    server_name cailidan.cn,www.cailidan.cn;
    root /usr/share/nginx/html;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / {
    proxy_pass http://127.0.0.1:4000/;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    error_page 404 /404.html;
    location = /404.html {
    root /usr/share/nginx/html;
    }
    location /web {
    root /usr/share/nginx/html;
    index index.php index.html index.htm;
    }
    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    # proxy_pass http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    root html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }


    中间学到的东西

    Redhat/CentOS安装软件有下面三种方法:
    1.使用YUM 来在线安装软件,基本和 “软件商店”的概念类似, 只需要在yum的容器中找到相应的软件(rpm包),然后直接安装(或升级)就OK了,过程比较简单。
    2.下载相应的RPM软件包,然后用RPM命令安装。
    3.下载软件的源码的Tarball, 在自己的机器上编译和安装。这种方法相对来说比较麻烦。


    RPM

    RPM是 Redhat Package Manager的缩写,是Linux上的一种软件打包和管理的工具。

    因为Linux的不同发行版(distribution),甚至同一发行版的不同版本之间往往有很多的不同, 开发者在某个Linux发行版下开发和编译的程序,直接放到另外一个Linux下有非常大的可能性无法运行。 因此早期的Linux的软件都是通过源码来分发,使用者基本都是通过在自己的Linux平台上重新编译源代码来安装软件。 但是这种编译源代码的方式比较繁琐和复杂,普通用户往往也难以掌握。

    后来 Redhat推出了RPM这个软件打包的方式。就是在特定的Linux平台上把软件编译好,然后把与这个软件相关的文件和库打包成一个文件(RPM包), 但需要注意的是: 通常不同的distribution所发布的RPM包往往不能用于其他的Linux的distributions上面。 例如,针对Redhat的RPM包往往无法直接在OpenSUSE上进行安装。因此,在使用RPM方式进行安装的时候,必须选择和你使用的平台一致的RPM安装包。


    RUM

    为了解决软件依赖的问题,已经为了给用户提供一种更加方便简单的软件安装方法, YUM被开发出来了。

    YUM 是Yellowdog Updater Modified 的缩写. YUM 是建立在RPM的基础之上的, 为用户提供软件安装,升级,卸载的功能。

    YUM最大的好处是解决了软件依赖的问题。YUM 把很多软件的RPM包放在RPM 容器(repository)中, 用YUM 方式来安装软件的时候,会自动分析你要安装的软件的依赖关系,并会自动帮你安装必须的“依赖软件”, 这样就解决了最为困扰用户的软件依赖的问题。

    那YUM容器(repository)的是什么呢?

    YUM容器类似一个软件仓库的概念,不但有各个软件的RPM安装包,还记录了他们之间的依赖关系。

    1
    2
    3
    4
    5
    6
    7
    yum list/search /info xxx
    yum list httpd //检查apache是否已经安装
    yum info httpd //查看apache的详细信息, 类似 rpm -qi httpd
    yum search httpd //查询和 apache (httpd)相关的软件
    yum install httpd //安装
    yum update httpd //升级
    yum remove httpd //卸载软件