码农日记原创,转载请注明出处并给出原文链接! 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的移植基本完成。

转载于:https://blog.51cto.com/devin223/1664904

CentOS上如何把Web服务器从Apache换到nginx相关推荐

  1. 把OctoberCMS的web服务器由Apache更换为Nginx

    卸载安装的apache和php yum remove httpd* php* 使用php -v看是否还能看到php的版本信息,如果能,说明没卸载干净,继续进行以下操作: rpm -qa | grep ...

  2. CentOS上快速安装Oracle服务器脚本

    CentOS上快速安装Oracle服务器脚本 配置repos源 # 注释下列代码,可能导致源问题 # cd /etc/yum.repos.d # wget http://yum.oracle.com/ ...

  3. web服务器 linux+apache+tomcat+mysql+jsp+php 整合安装

    2019独角兽企业重金招聘Python工程师标准>>> web服务器 linux+apache+tomcat+mysql+jsp+php 整合安装 自己的安装过程,以前发表在新浪博客 ...

  4. ubuntu的web服务器_如何在Ubuntu上安装OpenLiteSpeed Web服务器?

    ubuntu的web服务器 Want to install OpenLiteSpeed Webserver on Ubuntu? Today we're going to do just that. ...

  5. Unity使用UnityWebRequest实现本地日志上传到web服务器

    一.前言 Unity项目开发中,遇到bug的时候,我们一般是通过日志来定位问题,所以写日志到本地文件,或者把日志文件上传到web服务器这样的功能就很必要了.下面就介绍下如何实现日志写入本地文件和上传本 ...

  6. http文件上传到web服务器,上传到ftp服务器

    前期准备: ftp:服务器的配置.(为ftp上传使用). 注意: 1.要是你测试用,ftp就在你自己开发的机器上配置,一定别忘了要先创建用户.且该用户一定要有可读写的权限!要不然会出现ftp 530错 ...

  7. 摄像头网页服务器,js调用本地摄像头拍照并上传到web服务器

    [实例简介] js调用本地摄像头拍照并上传到web服务器.后台使用java实现图片的接收和存储,上传的图片默认保存到项目下的images文件夹中. [实例截图] [核心代码] MyCamera └── ...

  8. linux启动lighttpd服务,如何使用Yum在CentOS和RHEL上安装Lighttpd Web服务器

    Lighttpd是一种适合在生产环境中运行的高性能Web服务器.它是高度优化,安全且非常灵活的Web服务器:与其他Web服务器相比,LightTPD使用的内存和CPU非常低.其事件驱动架构针对大量并行 ...

  9. Web服务器 之 Apache 2.x 服务器中的URL重写的配置和应用

    作者:北南南北 来自:LinuxSir.Org 摘要: 本文是关于Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的.能过URL别名规则,我们能看到一个干净的UR ...

最新文章

  1. PyQt5+python3+pycharm开发环境配置
  2. 2019游戏 f1_2019年F1中国大奖赛激情开跑,这款手游带你体验真实F1的魅力
  3. 写给小白的计算机概论
  4. QTP中VBS脚本下FSO、WSH的应用(二)
  5. 【华为云技术分享】上亿条数据,如何查询分析简单又高效?
  6. python核心装饰_《python核心编程》中高级闭包和装饰器理解?
  7. Pytorch实战从入门到精通第一部分——手写字符识别全流程
  8. JS 数组(遍历 二维数组)
  9. Java获取打印机打印图片
  10. USB 转 RS-485 / 422 接口转换器
  11. 用批处理文件阻止win10强制更新
  12. 软件人员kpi制定模板_员工绩效考核制度模板(餐厅绩效考核方案制定)
  13. 分块矩阵求逆(推导)
  14. ipad html 自定义裁剪图片大小,如何在iPhone或iPad上裁剪和编辑照片 | MOS86
  15. SpringBoot+支付宝支付(沙箱)
  16. unity进度条加载
  17. 七种寻址方式(基址加变址寻址方式)
  18. C++实现——任意多边形的面积
  19. (闲杂笔记1) 控件尺寸与像素关系
  20. 基于Java毕业设计学校旧书交易网站源码+系统+mysql+lw文档+部署软件

热门文章

  1. 修改Hadoop的日志级别
  2. Kafka0.10.2.0分布式集群安装
  3. windows下SVN使用 Add指令、Undo Add指令
  4. Arch Linux 指南——安装基本系统
  5. Linux系统日志分析与管理(14)
  6. 12 生成器和生成器函数以及各种推导式
  7. Prim算法(最小生成树;例题:nyoj38)
  8. ST IKS01A1 驱动程序分析
  9. 【算法与数据结构】汉诺塔问题Java实现
  10. 《如何高效学习》读书笔记(一)——整体性学习策略