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

Nginx的安装并实现web功能

2013-09-10 00:08 489 查看
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 serverdaemonprog=/usr/local/nginx/sbin/nginxlockfile=/var/lock/nginx.lockpidfile=/var/run/nginx/nginx.pidspace=`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" instart) 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.10http://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.comhttp://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/CA88 countryName = optional89 stateOrProvinceName = optional90 organizationName = optional136 countryName_default = CN141 stateOrProvinceName_default =henan144 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: