`

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

 
阅读更多

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

By Jerry Wang | 2014/05/21

码农日记原创,转载请注明出处并给出原文链接!  http://www.androiddev.net/webserver-apache-to-nginx/

我的网站在阿里云服务器上, 1G内存的配置,但用了一段时间,感觉Apache有些撑不出,想了想,还是换到目前最热门的Nginx吧。 这里把整个过程记录下来,与大家共享。

Nginx简介:

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

1. Nginx最初是按照反向代理设计的,和Apache不同, nginx关心如何处理url,而不是文件!

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

 

nginx

安装Nginx

需要注意的是,在CentOS的YUM的基础的容器中,并没有nginx和php-fpm的RPM包。这两个RMP包在epel的容器中, 虽然你可以从官网下载RPM包来安装,但我个人建议,如果你的CentOS/Redhat中没有加入YUM的epel容器,还是先把这个yum容器加上去比较好,以后可以省无数的折腾。epel具体的安装方法,我在 Redhat/CentOS 软件安装之RPM和YUM  这篇文章中有介绍。

yum的容器库中加入了epel容器后,在CentOS上安装Nginx就非常简单,运行下面的命令就可以了。

1 yum install nginx

安装玩以后,会发现Nginx的配置文件放在 /etc/nginx目录下, 一般在缺省的情况下,web的root目录会在/usr/share/ngxin/html中。

安装完nginx以后,我们要测试一下是否安装成功了.

如果之前已经安装过Apache的话,先要把Apache的服务停掉。

1 /etc/init.d/httpd stop            #停掉apache服务
2  
3 chkconfig httpd off              #开机重启后,apache服务不再启动

这时候你在浏览器上输入 http://主机ip, 如果能出现nginx的测试页面 “Test page for the nginx http server on EPEL”就说明nginx已经正常运行了。

安装php-fpm

PHP-FPM (PHP-FastCGI Process Manager) 是目前最常用的一个PHP FastCGI的实现。通俗的讲,这个模块在Nginx和PHP之间桥梁,使之可以互相通信和交换。 

安装及启动过程如下:

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

下一步是确认一下,nginx和php-fpm是否已经正常运行. 执行 netstat -tunlp 命令,会看到大约如下的一个界面。

可以看到nginx在监听80端口,而php-fpm在监听9000端口。

Screenshot

 

设置Nginx 和 PHP-FPM

我们假定这个主机上有两个网站,一个是aaa.com, 普通的PHP站点, 一个是bbb.com,为wordpress的博客。 我们就讨论一下在这种情况下,如何设置nginx.

首先为站点建立相应的目录

1 mkdir -p  /var/www/aaa/html
2  
3 mkdir -p /var/www/bbb/html
4  
5 mkdir -p /var/log/nginx/aaa
6  
7 mkdir -p /var/log/nginx/bbb
8  
9 chown -R nginx:adm  /var/www/aaa/html
10  
11 chown -R nginx:adm  /var/wwww/bbb/html
12  
13 chown -R nginx:adm  /var/log/nginx/aaa
14  
15 chown -R nginx:adm  /var/log/nginx/bbb

为两个网站分别设置虚拟目录(virtual directory)

为了保证整个配置更加清晰,我们尽量不修改主配置文件/etc/nginx/nginx.conf , 而是在在/etc/nginx/conf.d目录下建立两个文件,一个是aaa.conf, 一个是bbb.conf

其中aaa.conf的内容如下 (aaa是一个普通的php网站):  参考于: http://wiki.nginx.org/PHPFcgiExample

1 server {
2  listen 80 default_server;                 #当输入ip时,会访问aaa.com
3  server_name www.aaa.com aaa.com *.aaa.com;  #这个应该是最好的写法了        
4  
5  access_log /var/log/nginx/aaa/access.log;   #access_log属于ngx_http_log_module的设置, 缺省level为info
6  error_log /var/log/nginx/aaa/error.log;     #error_log属于core module, 缺省的level是error
7  
8  location / {
9     root /var/www/aaa/html;
10     index index.php index.html index.htm;     #由于是PHP类型的动态页面为主,所以把index.php放在前面效率会更高些
11    # try_files $uri $uri/ /index.php?$args;   #普通php网站因为没有rewrite的话,这个不需要
12  }
13  
14  error_page 404 /404.html;         #error_page errcode uri (也就是说出现了404错误,会请求/404.html)
15  location = /404.html {            #这是一个典型的location
16    root /var/www/aaa/html;
17  }
18  
19  # redirect server error pages to the static page /50x.html
20  #
21  error_page 500 502 503 504 /50x.html;
22  location = /50x.html {
23  root /var/www/aaa/html;
24  }
25  
26  # proxy the PHP scripts to Apache listening on 127.0.0.1:80
27  # 因为我们不用Nginx做Apache的反向代理,所以不需要这个
28  #location ~ \.php$ {
29  # proxy_pass http://127.0.0.1;
30  #}
31  
32  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
33  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
34  # 这种写法可以防止把恶意程序伪装成.jpg之类的攻击,(其实有个更简单的方法,就是把php.ini中的cgi.fix_pathinfo=0,但有时候简单的修改cgi.fix_pathinfo会造成有的php脚本出错)
35  
36  location ~ [^/]\.php(/|$) {
37    root /var/www/aaa/html;
38    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
39     
40    if (!-f $document_root$fastcgi_script_name) {
41      return 404;
42    }
43    #try_files $uri =404;         #这个try_files说明:对于.php文件,直接执行$uri, 如果找不到这个$uri,直接给出404错误,(和 location / 定义不同!),主要是为了防止 伪装成图片的攻击  (目前看,最安全的方式,是用上面那一句话,官方推荐的)
44  
45    fastcgi_pass 127.0.0.1:9000;
46    fastcgi_index index.php;
47    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
48    include fastcgi_params;
49  }
50  
51  # deny access to .htaccess files, if Apache's document root
52  # concurs with nginx's one
53  #
54  location ~ /\.ht {
55    deny all;
56  }

设置完aaa.com的环境后,还需要设置bbb.com的 nginx的配置,因为bbb.com是wordpress的站点, 除了和aaa.com相同的设置外,还有些特殊的设置,具体设置请参考http://codex.wordpress.org/Nginx

至此,从Apache向Nginx的移植基本完成。

分享到:
评论

相关推荐

    Linux Centos 一键安装web环境

    在IT行业中,Linux系统,尤其是CentOS,是搭建Web服务器的常见选择,因为其稳定性、安全性和开源特性。本文将详细讲解如何在Linux CentOS环境下,通过一键安装脚本快速配置Web服务环境,包括Nginx、Apache、MySQL、...

    Linux服务器端Web服务三剑客(Apache Lighttpd Nginx).docx

    自1996年以来,Apache一直是互联网上最受欢迎的Web服务器,尽管市场份额近年来受到了如IIS、GWS、Lighttpd和Nginx等竞争对手的挑战,但其市场占有率仍然居首。 Apache的安装在许多Linux发行版中都是预装的,如...

    Centos+Nginx+UWSGI+Django搭建高性能WEB服务器

    本文将详细介绍如何在CentOS系统上搭建使用Nginx作为Web服务器、UWSGI作为应用服务器、Django作为后端框架的高性能Web应用。 ### 关键技术点概述 1. **CentOS**: CentOS是基于Red Hat Enterprise Linux构建的一个...

    centos8 安装 nginx的详细教程(图文)

    本教程说明了如何在CentOS 8上安装Nginx。  NGINX官网 http://nginx.org/ 创建文件夹mkdir nginx 进入创建的文件夹 根据自己需要下载合适版本 通过 wget http://nginx.org/download/nginx-1.17.6.tar.gz

    centOS8安装nginx及nginx配置

    Nginx(发音为 "engine X")是一款由俄罗斯程序员Igor Sysoev开发的高性能Web服务器和反向代理服务器,同时也可用作IMAP/POP3/SMTP代理服务器。在高并发连接情况下,Nginx作为Apache服务器的一种替代方案表现出了...

    实战Nginx取代Apache的高性能WEB服务器

    ### 实战Nginx取代Apache的高性能WEB服务器 在当今互联网技术快速发展的背景下,Web服务器作为网站的基础支撑组件,其性能、稳定性和安全性对于保障网站的正常运行至关重要。Apache和Nginx作为目前最流行的两种Web...

    apache与nginx安装使用

    Apache与Nginx是两种广泛使用的HTTP服务器,它们在Web服务领域扮演着重要角色。Apache以其强大、稳定和丰富的模块支持而闻名,而Nginx则以高效的反向代理、负载均衡和静态文件处理能力著称。下面我们将详细介绍这两...

    How To Install nginx on CentOS 6 with yum

    Nginx 是一个高性能的 Web 服务器软件,一般来说,它比 Apache 软件更加灵活和轻量级。在本教程中,我们将指导您如何在 CentOS 6 上使用 yum 安装 Nginx 服务器。 Nginx 服务器简介 Nginx 是一个免费的开源软件,...

    centos nginx安装包

    Nginx是一款高性能、轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,因其高效的性能和稳定性而广受欢迎。本教程将详细介绍如何在CentOS上安装Nginx。 首先,我们需要更新系统的软件包列表,...

    基于CentOS 7.6 配置Nginx + Tomcat

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它的主要特点是高性能、高并发和低内存消耗,非常适合用作静态内容的Web服务器以及作为反向代理服务器负载均衡。 ### Tomcat ...

    Nginx+Apache搭建前后端web生产环境

    本文将探讨如何在Linux环境下,特别是CentOS 5.4 32位系统上,搭建Nginx+Apache的组合,以实现前后端分离的高效Web服务。 首先,Nginx作为前端服务器,其主要职责是处理静态资源请求和分发动态请求到后端的Apache...

    linux/centos 安装配置nginx 详细文档

    Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 (IMAP/POP3) 代理服务器,由 C 语言开发而成,非常适合在 Linux 下运行。它以其高性能、稳定性以及低内存消耗而闻名,在高并发场景下的表现尤为突出。...

    Nginx企业级WEB服务器实战

    相较于Apache等其他流行的WEB服务器软件,Nginx具备以下显著优势: 1. **高并发响应能力**:Nginx在处理静态文件时能实现高达5万次每秒的并发请求处理能力。 2. **强大的负载均衡与反向代理性能**:Nginx能够有效地...

    centos 6.0最简化编译安装Nginx+Mysql+PHP+Zend

    CentOS 6.0作为一款广泛使用的Linux发行版,提供了丰富的功能和稳定性,非常适合构建Web服务器。本文将详细解析如何在CentOS 6.0上通过编译安装Nginx、Mysql、PHP以及Zend Optimizer的过程,旨在为开发者提供一个...

    nginx+apache+mysql+php+memcached+squid搭建集群web环境

    首先,我们需要了解集群Web环境的基本架构,通常包括客户端、负载均衡器、反向代理/缓存、Web服务器以及数据库服务器。在这个架构中,nginx作为负载均衡器,负责分发请求;apache与php结合处理动态内容;mysql作为...

    lnmp_base_centos8_php8_apache2.4.7z

    标题“lnmp_base_centos8_php8_apache2.4.7z”表明这是一个关于在CentOS8系统上搭建LNMP(Linux + Nginx + MySQL/Percona + PHP)环境的压缩包,其中主要包含了PHP8.0.7、Apache2.4.28和Percona-Server8.0.22的基础...

    搭建nginx+apache+mysql+php+memcached+squid服务器集群.zip_nginx正向代理

    2. **Apache**:Apache是最流行的Web服务器之一,支持多种编程语言如PHP。在这里,它作为应用程序服务器,处理由Nginx转发的请求,并执行PHP代码,返回动态网页内容。 3. **MySQL**:MySQL是一个关系型数据库管理...

    nginx+apache+mysql+php+memcached+squid搭建门户网站

    Nginx是一款开源的Web服务器,以其高性能和稳定性著称。其编译参数如下: ```bash [root@localhost]# ./configure --prefix=/usr/local/server/nginx --with-openssl=/usr/include \ --with-pcre=/usr/include/pcre...

    linux环境下web服务器搭建完整版

    Web服务器会生成访问日志和错误日志,如Apache的`/var/log/apache2/access.log`和`error.log`,Nginx的`/var/log/nginx/access.log`和`error.log`。定期查看日志有助于排查问题。 通过以上步骤,你已经在Linux环境...

Global site tag (gtag.js) - Google Analytics