您的位置:首页 > 运维架构 > Nginx

CentOS下安装Nginx并实现web功能

2015-01-16 09:24 387 查看
Nginx的安装实现web功能

nginx是由俄罗斯人开发的一种实现web服务器的工具,主要是为俄罗斯的第三大门户网站实现反向代理加速的服务器。nginx只能对http和mail服务器实现反向代理加速,但是其速度比squid 、varnish等实现的反向代理加速要快的多,可以说是无与伦比的。

nginx与apache的区别:

apache 在处理用户请求时采用的是进程,若采用prefork的mpms机制,apache在每个时刻都要保持8个空闲的子进程,当用户请求过多时,开启的进程较多,占用内存大,效率与nginx相比较低,每秒最多的并发连接请求最多不超过3000个。但是apache有个优点就是非常稳定,当一个进程死掉时,不会影响其他的用户。而nginx在处理用户请求时采用的是线程,而线程是共享内存的,nginx只需要开启少量进程,多个线程就可以共享进程的内存,占用内存小,nginx采用的是epoll机制(事件主动通知机制)每秒最多的并发连接请求理论可以达到50000个。但是nginx的缺点是,稳定性差,当一个进程死掉时,会影响到多个用户的使用。

废话不说了,下面就使用nginx实现web功能:

环境:rhel 5.4

软件:nginx-1.5.4.tar.gz

libevent-2.0.16-stable.tar.gz 由于nginx采用的是epoll机制需要事件库的支持

pcre-devel-6.6-2.el5_1.7.i386.rpm 支持正则表达式的库

搭建支持nginx的环境,首先安装pcre-devel和libevent:

[root@localhostServer]# rpm -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm

[root@localhost~]# tar -zxvf libevent-2.0.16-stable.tar.gz -C /usr/local/src/

[root@localhost~]# cd /usr/local/src/libevent-2.0.16-stable/

[root@localhostlibevent-2.0.16-stable]# ./configure --prefix=/usr/local/libevent

[root@localhostlibevent-2.0.16-stable]# make && make install

[root@localhostlibevent-2.0.16-stable]# cd /usr/local/libevent/



为了系统能其他的程序能够调用libevent的头文件和库文件我们需要进行下面的操作:

[root@localhostlibevent]# ln -s /usr/local/libevent/include /usr/include/libevent

[root@localhostlibevent]# vim /etc/ld.so.conf.d/libevent.conf 文件内容如下:



[root@localhostlibevent]# ldconfig



安装nginx,由于是源代码我们需要拆解配置和安装:

由于nginx是系统服务,运行此服务需要系统账户,所以我们要创建系统账户nginx

[root@localhost~]# groupadd nginx

[root@localhost~]# useradd -r -g nginx -s /sbin/nologin -M nginx

[root@localhost~]# tar -zxvf nginx-1.5.4.tar.gz -C /usr/local/src/

[root@localhost~]# cd /usr/local/src/nginx-1.5.4/

[root@localhostnginx-1.5.4]# ./configure \

>--conf-path=/etc/nginx/nginx.conf \

>--error-log-path=/var/log/nginx/error.log \

>--http-log-path=/var/log/nginx/access.log \

>--pid-path=/var/run/nginx/nginx.pid \

>--lock-path=/var/lock/nginx.lock \

>--user=nginx \

>--group=nginx \

>--with-http_ssl_module \

>--with-http_flv_module \

>--with-http_stub_status_module \

>--with-http_gzip_static_module \

>--http-client-body-temp-path=/var/tmp/nginx/client/ \

>--http-proxy-temp-path=/var/tmp/nginx/proxy/ \

> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/\

>--with-pcre

[root@localhostnginx-1.5.4]# make && make install

安装完成后,会在安装目录下产生下面两个目录:



接着去创建/var/tmp/nginx/client、/var/tmp/nginx/proxy、/var/tmp/nginx/fcgi目录:

[root@localhost~]# mkdir -pv /var/tmp/nginx/client

[root@localhost~]# mkdir -pv /var/tmp/nginx/proxy

[root@localhost~]# mkdir -pv /var/tmp/nginx/fcgi

然后修改/etc/profile环境文件加入下面一句话,后并使用 . /etc/profile 命令重新读取环境文件使得修改后的内容生效:



接着为了方便我们管理,我们需要写nginx的控制脚本,一般程序的控制脚本存放在/etc/init.d/目录下,所以我们在此目录下创建nginx文件并且修改其权限为可执行nginx的内容如下:

#!/bin/bash

# chkconfig: 2345 65 45

# description: nginx serverdaemon

prog=/usr/local/nginx/sbin/nginx

lockfile=/var/lock/nginx.lock

pidfile=/var/run/nginx/nginx.pid

space=`echo"\t\t\t\t\t\t"`

start(){

[ -f $lockfile ] && echo"nginx is started." && exit

echo -n "nginx is starting.."

sleep 1 && echo -n"."

$prog && echo -e "$space[\033[32m OK\033[0m]" && touch $lockfile || echo -e "$space[\033[31m failed\033[0m]"

}

stop(){

[ ! -f $lockfile ] && echo"nginx is stopped." && exit

echo -n "nginx is stopping.."

sleep 1 && echo -n"."

$prog -s stop && echo -e "$space[\033[32m OK \033[0m]"&& rm -f $lockfile || echo -e"$space[\033[31m failed \033[0m]"

}

status(){

[ ! -f $pidfile ] && echo"nginx is stoped" || echo "`cat $pidfile`,nginx is running"

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

status)

status

;;

*)

echo "UASGE IS:start|stop|restart|status"

;;

Esac



现在可以执行chkconfig–add nginx来实现chkconfig 管理,也可以使用chkconfig–list nginx查看nginx服务在何种级别的开启与关闭的状态。



启动nginx服务,我们访问http://192.168.2.10 :



说明我们web可以正常运行了。当然nginx实现的web服务器同apache实现的web服务器一样,也可以做基于虚拟目录、主机头、ip地址的虚拟站点。

基于ip地址的虚拟站点实现:

为了达到实验的目的,给我们的linux主机再配置一个临时地址

[root@localhost~]# ifconfig eth0:0 192.168.2.20



修改nginx的配置文件,如下:

server {

listen 192.168.2.10:80;

server_name localhost;

access_log /var/log/nginx/access.log;

error_log /var/log/nginx/error.log;

location / {

root html;

index index.html index.htm;

}

}

server {

listen 192.168.2.20:80;

server_name localhost;

access_log /var/log/nginx/tec_access.log;

error_log /var/log/nginx/tec_error.log;

location / {

root /usr/local/nginx/tec;

index index.html index.htm;

}

}

然后创建/usr/local/nginx/tec目录,进入该目录创建一个index.html网页,重启nginx服务后,分别访问http://192.168.2.10和http://192.168.2.20 :





基于主机头的虚拟主机只需要在上面的基础上稍作修改:

server{

listen 192.168.2.10:80;

server_name www.abc.com;

location / {

root html;

index index.html index.htm;

}

}

server {

listen 192.168.2.10:80;

server_name tec.abc.com;

location / {

root /usr/local/nginx/tec;

index index.html index.htm;

}

}

为了实现基于域名的访问,要么做DNS域名解析,要么就修改主机的hosts文件,我就偷下懒,修改hosts文件(注意hosts文件的位置:windows下C:\Windows\System32\drivers\etc\hosts,linux下/etc/hosts)



现在分别访问http://www.abc.com和http://tec.abc.com :





基于虚拟目录的虚拟主机就非常简单了,基于虚拟目录的访问不管真正的存放网页的目录在任何位置,我们都能让它基于某个目录实现访问:

我们就随意创建个目录/abc,在该目录下新建一个index.html的网页,接着我们以上nginx的配置文件稍作修改:

[root@localhost/]# mkdir /abc

[root@localhost/]# echo "this is just a test" >/abc/index.html

在配置文件的tec.abc.com的server内增加这样一个location:

location /test {

alias /abc;

index index.html index.htm;

}

这次访问一下http://tec.abc.com/test:



同样nginx也能同apache一样实现https-加密访问。所谓加密访问就是要http与安全套接层ssl结合,实现站点的安全性。关于web站点实现ssl安全的原理你可以查看kunjiang的另一篇博客《apache的站点安全》。

首先要搭建CA服务器,用于向用户或者服务器签发证书,那么现在就搭建CA服务器:

修改/etc/pki/tls/openssl.cnf文件,需要修改的内容如下:

45 dir = /etc/pki/CA

88 countryName = optional

89 stateOrProvinceName = optional

90 organizationName = optional

136 countryName_default = CN

141 stateOrProvinceName_default =henan

144 localityName_default = Zhengzhou

内容修改之后,我们需要在/etc/pki/CA目录下去创建三个目录(certs、crl、newcerts)和两个文件(index.txt、serial),并且将内01这个数字写入serial文件。这些准备做好之后,就可以去实现CA服务器了:

我们使用openssl为CA产生私钥,私钥名字为cakey.pem存放在/etc/pki/CA/private/目录下,为了私钥的安全性,必须修改cakey.pem的权限为600:



由于本CA服务器要想为其他人服务,那么它必须是一个别人可以信任的机构,需要根CA给他签发证书,在我们的环境中只有这一台CA服务器,那么它就是根CA,它的证书需要自己签署。



CA服务器的操作已经完成,我们要为我们的web服务器签发证书,那么必须要有请求文件,产生请求文件靠的是私钥文件,所以web服务器签发证书的过程是私钥文件à请求文件à证书:

我们先在/usr/local/nginx目录下创建cert目录用于存放服务器的上面三个文件,然后切换到cert目录去产生这三个文件:









现在我们要将证书与web结合,那么我们就需要修改nginx的配置文件,在http的大括号内加入下面这段内容:



重启nginx服务:



现在我们访问https://www.abc.com出现下面的页面:





说明客户端不信任我们的证书,要想客户端信任我们的证书,必须先让其信任我们的证书颁发机构CA,我们必须把CA加入到信任列表。要想加入到信任列表必须要在证书路径那出现完整路径。

这里操作与apache的加密访问时有点区别,在这里为了出现完整路径,我们必须把CA的证书与web的证书合并。



再次访问https://www.abc.com :





然后根据向导进行操作:











导入成功,打开控制台(开始à运行àmmc)添加证书,可以看到已经将根CA加入到可信任的根机构:





此时,已经可以基于https正常访问了!

本文出自 “夜风” 博客,请务必保留此出处http://jiangkun08.blog.51cto.com/6266992/1293456
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: