码农日记原创,转载请注明出处并给出原文链接! 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
需要注意的是,在CentOS的YUM的基础的容器中,并没有nginx和php-fpm的RPM包。这两个RMP包在epel的容器中, 虽然你可以从官网下载RPM包来安装,但我个人建议,如果你的CentOS/Redhat中没有加入YUM的epel容器,还是先把这个yum容器加上去比较好,以后可以省无数的折腾。epel具体的安装方法,我在 Redhat/CentOS 软件安装之RPM和YUM 这篇文章中有介绍。
yum的容器库中加入了epel容器后,在CentOS上安装Nginx就非常简单,运行下面的命令就可以了。
安装玩以后,会发现Nginx的配置文件放在 /etc/nginx目录下, 一般在缺省的情况下,web的root目录会在/usr/share/ngxin/html中。
安装完nginx以后,我们要测试一下是否安装成功了.
如果之前已经安装过Apache的话,先要把Apache的服务停掉。
1 |
/etc/init.d/httpd stop #停掉apache服务 |
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之间桥梁,使之可以互相通信和交换。
安装及启动过程如下:
3 |
/etc/init.d/php-fpm start |
下一步是确认一下,nginx和php-fpm是否已经正常运行. 执行 netstat -tunlp 命令,会看到大约如下的一个界面。
可以看到nginx在监听80端口,而php-fpm在监听9000端口。
设置Nginx 和 PHP-FPM
我们假定这个主机上有两个网站,一个是aaa.com, 普通的PHP站点, 一个是bbb.com,为wordpress的博客。 我们就讨论一下在这种情况下,如何设置nginx.
首先为站点建立相应的目录
1 |
mkdir -p /var/www/aaa/html |
3 |
mkdir -p /var/www/bbb/html |
5 |
mkdir -p /var/log/nginx/aaa |
7 |
mkdir -p /var/log/nginx/bbb |
9 |
chown -R nginx:adm /var/www/aaa/html |
11 |
chown -R nginx:adm /var/wwww/bbb/html |
13 |
chown -R nginx:adm /var/log/nginx/aaa |
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
2 |
listen 80 default_server; #当输入ip时,会访问aaa.com
|
3 |
server_name www.aaa.com aaa.com *.aaa.com; #这个应该是最好的写法了
|
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
|
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的话,这个不需要
|
14 |
error_page 404 /404.html; #error_page errcode uri (也就是说出现了404错误,会请求/404.html)
|
15 |
location = /404.html { #这是一个典型的location
|
16 |
root /var/www/aaa/html;
|
19 |
# redirect server error pages to the static page /50x.html
|
21 |
error_page 500 502 503 504 /50x.html;
|
22 |
location = /50x.html {
|
23 |
root /var/www/aaa/html;
|
26 |
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
|
27 |
# 因为我们不用Nginx做Apache的反向代理,所以不需要这个
|
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脚本出错)
|
36 |
location ~ [^/]\.php(/|$) {
|
37 |
root /var/www/aaa/html;
|
38 |
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
40 |
if (!-f $document_root$fastcgi_script_name) {
|
43 |
#try_files $uri =404; #这个try_files说明:对于.php文件,直接执行$uri, 如果找不到这个$uri,直接给出404错误,(和 location / 定义不同!),主要是为了防止 伪装成图片的攻击 (目前看,最安全的方式,是用上面那一句话,官方推荐的)
|
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;
|
51 |
# deny access to .htaccess files, if Apache's document root
|
52 |
# concurs with nginx's one
|
设置完aaa.com的环境后,还需要设置bbb.com的 nginx的配置,因为bbb.com是wordpress的站点, 除了和aaa.com相同的设置外,还有些特殊的设置,具体设置请参考http://codex.wordpress.org/Nginx
至此,从Apache向Nginx的移植基本完成。
相关推荐
linux、centos环境下一键安装web的环境。 nginx、apache、mysql、php、tomcat 、jdk、ftp:(yum/apt-get安装)、phpwind、phpmyadmin
本教程说明了如何在CentOS 8上安装Nginx。 NGINX官网 http://nginx.org/ 创建文件夹mkdir nginx 进入创建的文件夹 根据自己需要下载合适版本 通过 wget http://nginx.org/download/nginx-1.17.6.tar.gz
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 可以在...
搭建一个网站传统的方法是使用一个web服务器去解析文件入口文件,如使用Nginx,Apache解析到对应的入口文件,但是随着技术的发展,一些语言可以自己起一个web服务,如Node,PHP,使用开发语言启动一个web服务默认只能在...
【吐血推荐】nginx+apache+mysql+php+memcached+squid搭建集群web环境(二) 此乃本人N次服务器真机实验所得,所以分数高点,望体谅.. 按教程来做,你也可以搭建linux服务器... 注:此乃分卷二,
php+mysql+nginx安装与常遇到的错误 centos系统为例子 在高并发连接的情况下,Nginx是Apache服务器不错的替代品。...具体可参考 张宴《Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)》
特别是,CentOS 7以其安全性、可靠性和稳定性而闻名,因此它是一个理想的Web服务器操作系统,集成了许多流行的Web服务器软件,如Apache和Nginx,还具有强大的文件管理功能,使得管理员可以轻松地管理和维护Web服务器...
在CentOS上安装phpMyAdmin,你第一步需要架设一台Web服务器(如Apache或nginx),安装好MySQL/MariaDB数据库和PHP。根据你的偏好和需求,你可以从LAMP和LEMP中选择一种安装。 另一个要求是允许在你的CentOS上安装EPEL...
Nginx_0.8.x_+_PHP_5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器,在centos下配置mail服务器及memcache 服务器
但是这个工具是安装apache web server的时候自带的,现在我服务器上都是跑nginx。也不想为了用这个工具就再装个apache。所以在用下面方法单独安装ab工具,这里记录下步骤。 首先安装ab运行需要的软件包apr-util yum...
在主流的 web 服务器上测试通过: Nginx 1.1.19、 Lighttpd 1.4.28 和 Apache 2.2.22 ,环境为 Ubuntu 12.04、 Debian 6 & 7 和 CentOS 6,只需要调整部分参数就可以工作在其它的发行版上。 什么是 HTTP 严格传输...
Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。Nginx性能稳定、功能丰富、运维简单、处理静态...
3、支持用户自由弹性组建运行环境与切换环境,可以下载安装不同WEB服务器、数据库、脚本软件自由组合创建需要的WEB运行环境。 4、面板增加两种安装方式,极速安装与编译安装,极速方式最快可在几十秒内完成amh面板...
Web服务器:Apache-2.2、Nginx-0.56、IIS-6.0以上版本(推荐apache-2.2); 开发语言:PHP-5.2版本; 数 据 库:MySQL-5.0以上版本; 模块支持:php-curl、php-rewrite、php-gd等基本模块; 字符编码:支持国际...
WEB服务器APACHE LAMP架构 日志服务管理 网络文件共享服务 备份硬盘数据 管理存储三要素 逻辑卷实现 转移硬盘步骤 逻辑卷快照 开启路由转发 网桥的实现 正在访问文件被删复原 作业管理 Linux启动流程 Linux根据端口...
依赖安装:一键安装环境会自动处理底层依赖,如安装必要的系统库、网络服务(如Nginx或Apache作为Web服务器)、数据库服务(如MySQL或MariaDB用于存储游戏数据)、以及其他可能的中间件和服务。 游戏部署:将天龙八...
Ewomail介绍 EwoMail是基于Linux的开源邮件服务器软件,集成了众多优秀稳定的组件,是一个快速部署、简单高效、多语言、安全稳定的邮件解决方案,...centos 6/7 系统,服务器需要干净环境,最好是全新安装的系统。
Linux进阶篇总共包含6个章节,第9章到第14章学习内容分别包括:HTTP协议详解、Apache WEB服务器企业实战、MySQL数据库服务器企业实战、LAMP企业架构实战、Zabbix分布式监控系统实战、Nginx高性能WEB服务器实战等。...
1 Web服务器 Dell R730 E5-2620 v4 32GB 1TB SSD 1000Mbps Ethernet CentOS 7.6 Apache, Nginx 2 数据库服务器 Dell R730 E5-2640 v4 64GB 2TB SSD 1000Mbps Ethernet Ubuntu 18.04 LTS MySQL, Redis, PostgreSQL 3 ...
Nginx是一款开源,强大且高性能的Web服务器,它还可以兼作反向代理。 MariaDB是用于存储用户数据的数据库系统,而PHP是用于开发和支持动态网页的服务器端脚本语言。 相关: CentOS 8.1下搭建LAMP(Linux+Apache+MySQL...