怎么在linux下搭建一个nginx服务器
大家对Nginx服务器有了解吗如果想要了解网站服务器的朋友,那么就需要学习一下在电脑中搭建Nginx WEB服务器的基础,Nginx主要是用在Linux的主机上,不过它也可以运行在Windows上,下面就让小编为大家介绍下,如何在Winxp系统中搭建Nginx WEB服务器。Winxp系统的电脑怎么搭建Nginx WEB服务器具体方法如下:1、下载Nginx程序包,仅有1M左右大小,相当小巧功能强大!2、将下载好的zip压缩包的文件全部解压,双击运行nginxexe,你会看到一个黑色窗口一闪而过就没了,这就说明Nginx服务器已经正式启动(没有程序界面的)。3、在浏览器输入访问 127001 回车,如果看到“Welcome to nginx!”则说明你在本机搭建的服务器已经成功运行。如果没有,请检查你的电脑的80端口是否被占用,或者打开任务管理器查看一下是否有两个“nginxexe”进程在运行。4、完成以上简单的三步后,我们的Nginx网页服务器就搭建完成了,但是呢到这里只能支持html的纯网页,如果想让它支持php脚本还需要进一步安装php的运行环境。以上方法操作起来十分便捷,想要在XP系统上免费搭建Nginx服务器的小伙伴们快来看看吧。如有更多疑问,欢迎访问安下软件站。
2、以普通用户登录终端,然后导入GPG signing key。
$ sudo rpm --import "http://nginxorg/keys/nginx_signingkey"
3、安装1中下载的软件包。
$ sudo yum install /home/sue/download/nginx-release-centos-7-0el7ngxnoarchrpm
其中“/home/sue/download/”为软件包的保存路径。
4、安装nginx服务器
$ sudo yum install nginx
至此,如果没有意外的话,就全部安装完成了,接下来就是配置服务器了。
安装完nginx了,我们先来看看nginx安装在什么位置了。
$ whereis nginx
执行完该命令,系统提示如下位置:
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx3pmgz /usr/share/man/man8/nginx8gz
那么我们很容易的知道nginx服务器的配置文件放在什么位置:/etc/nginx
然后我们查看该目录下有哪些配置文件:
$ cd /etc/nginx
$ ls -l
执行完该命令,我们可以看到一些文件列表,但我们目前只需要查看“nginxconf”文件的内容,它即是nginx服务器的配置文件:
$ cat -n nginxconf
注意:如果选择的nginx安装包是“Nginx for CentOS 6”,那么配置文件的路径则可能不是这个路径,可能是/etc/nginx/confd/defaultconf这个路径。
从上面的配置项可以看出,服务器的默认监听端口为80端口,服务器名称(也可以成为域名)为localhost(127001),服务器的根目录为“/usr/share/nginx/html”。如果服务器启动正常的话,那么我们直接在浏览器的地址栏输入“localhost”或“127001”,应该就能看到默认首页。下面我们就启动nginx服务器:
$ sudo nginx
如果报错,则需要在上一条命令执行完之后,再执行如下命令:
$ sudo nginx -s reload
如果没有报错,打开浏览器在地址栏输入“127001”就可以看到如下默认首页:
另外,Nginx还有以下几个常用命令行参数:
quit - 正常关闭服务器
stop - 强制关闭服务器
reload - 重新加载配置文件
reopen - 重新打开日志文件
至此,一个可以承载静态页的nginx服务器就安装好了,但是它还尚不能承载AspNet Web应用,我们还需要进行一些配置。这些配置我将会在后续使用Mono运行时在nginx上搭建AspNet Mvc应用时再进行说明。
〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
〉另外一个功能就是作为反向代理服务器实现负载均衡
以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。
1)环境:
a 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );
b nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。
c 如下介绍两种方法实现server cluster的负载均衡。
我们假设前端nginx(为127001:80)仅仅包含一个静态页面indexhtml;
后台的两个apache服务器(分别为localhost:80和1583770143:80),一台根目录放置phpMyAdmin文件夹和testphp(里面测试代码为print “server1“;),另一台根目录仅仅放置一个testphp(里面测试代码为 print “server2“;)。
2)针对不同请求 的负载均衡:
a 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginxconf中修改:
复制代码 代码如下:
location ~ \php$ {
proxy_pass 1583770143:80 ;
}
〉 这样当客户端访问localhost:8080/indexhtml的时候,前端的nginx会自动进行响应;
〉当用户访问localhost:8080/testphp的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \php$(表示正则表达式匹配以php结尾的文件,详情参看location是如何定义和匹配的 http://wikinginxorg/NginxHttpCoreModule) ,nginx服务器会自动pass给 1583770143的apache服务器了。该服务器下的testphp就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。
如上是最为简单的使用nginx做为反向代理服务器的例子;
b 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
我们设置nginxconf的server模块部分,将对应部分修改为:
复制代码 代码如下:
location ^~ /phpMyAdmin/ {
proxy_pass 127001:80 ;
}
location ~ \php$ {
proxy_pass 1583770143:80 ;
}
上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以http://localhost:8080/phpMyAdmin/ 开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127001:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
如果客户端访问URL是http://localhost/testphp 的话,则会被pass到1583770143:80 的apache进行处理。
因此综上,我们实现了针对不同请求的负载均衡。
〉如果用户访问静态页面indexhtml,最前端的nginx直接进行响应;
〉如果用户访问testphp页面的话,1583770143:80 的Apache进行响应;
〉如果用户访问目录phpMyAdmin下的页面的话,127001:80 的Apache进行响应;
3)访问同一页面 的负载均衡:
即用户访问http://localhost:8080/testphp 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。
a 现在我们的情况是在windows下nginx是localhost侦听8080端口;
两台apache,一台是127001:80(包含testphp页面但是打印server1),另一台是虚拟机的1583770143:80(包含testphp页面但是打印server2)。
b 因此重新配置nginxconf为:
〉首先在nginx的配置文件nginxconf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
复制代码 代码如下:
upstream myCluster {
server 127001:80 ;
server 1583770143:80 ;
}
表示这个server cluster包含2台服务器
〉然后在server模块中定义,负载均衡:
复制代码 代码如下:
location ~ \php$ {
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样的话,如果访问http://localhost:8080/testphp 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127001:80;或者1583770143:80;来做处理。
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster {
server 127001:80 weight=5;
server 1583770143:80 ;
}
这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。
综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
两种均衡:
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问testphp代理到第二台server上;
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问testphp页面,会均衡地代理到server1或者server2上。
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
安装完成Nginx服务器之后我们需要来学习如何启动,停止,重启Nginx服务。在Linux平台下有着不止一种的控制Nginx启停的方法 下面我们来详细的学习一下。
Nginx的信号控制
在控制nginx中有一类是通过信号控制的,因此我们来先介绍一下Nginx服务器的信号控制
在nginx服务运行时,会保持一个主进程和多个worker process 工作进程, 我们可以通过给主进程发送信号,就可以控制服务的启停了,那么我们如何去给服务发送信号发送信号我们必须要知道服务的PID, 那么我们就来获取一下他的进程ID
第一种直接利用ps 查看详情 :
第二种 我们直接查看文件存储地址查看: 此操作需要先开启pid的存储才可以生效
找到我们的pid之后那么可以开始我们下一步的操作 再开始之前先了解一下可以接受的信号有哪些,各自有什么含义
向Nginx服务进程发送信号也有两种方式:
同样我我们可以使用动态的PID
kill 信号 filepath (filepath指的是我们的NginxPID的路径)
nginx服务的启动
在linux平台下,启动Nginx服务器直接运行安装目录下的Sbin目录中的二进制文件即可
具体命令在sbin目录下:
这里主要讲下二进制文件的用法这是我们工作中常常用到的一些指令
nginx服务停止
停止我们的Nginx有两种方式
Nginx服务的重启
当我们Nginx服务加入新的模块后,如果希望当前的Nginx服务应用新的配置或者使用新的模块生效,就需要重启Nginx服务。当然我们可以先关闭Nginx服务然后使用新的Nginx配置文件重启Nginx服务, 这里我们讲的 是平滑的重启Nginx服务
平滑是重启的一个过程,Nginx服务进程收到信号后先读取我们新的配置文件,如果我们新的配置文件正常,那么启动新的Nginx服务,然后平滑的关闭旧的进程服务,如果新的Nginx服务配置文件有问题那么将显示错误然后任然使用旧的Nginx
使用以下命令可以做到Nginx的平滑重启
Nginx服务的升级
如果我们需要对当前的Nginx服务进行升级 ,应用新的模块,最简单的方式是停下来,然后开启新的Nginx服务,那么给我们的用户体验是非常差的,会导致用户在一段时间内无法访问我们的服务器为了解决这个问题,Nginx提供了平滑升级的方案
过程如下:
注意:
为了实现nginx服务器的平滑升级,新安装的服务器路径应该和旧的一致。因此建议用新安装的服务器之前先备份一下我们的旧nginx服务器,如果由于种种原因不能保持新旧客户端路径一致则可以做一下操作,将旧的服务器路径更改为新的路径,新的服务器放入旧的路径中
执行过程
Nginx服务接受到USR2的信号后,首先将旧的Nginx。pid文件后面添加一个oldbin
变成了,nginxpidoldbin 然后执行新版本的Nginx服务器的二进制文件启动服务,如果启动成功那么我们将会有两个Nginx服务在提供服务
之后需要向旧的发送WINCH信号,使旧的nginx服务平缓的停止并删除
nginxpidoldbin文件 在发送WINCH信号前我们可以随时停止新的服务
从目录中我们不难看出所有的配置文件都放在conf目录下主要的配置文件为 Nginxconf
那么下面我们带领你来去详细的解读一下其中的配置详情
注:近期持续更新有关nginx的知识点,欢迎大家关注!
0条评论