地球最强WEB前端Nginx服务器之搭建基础静态WEB站点

1.1 Nginx概述及常用Web服务器介绍

1.1.1 Nginx简介:(来自百度百科)

Nginx (engine x) 是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004104日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名201161日,nginx 1.0.4发布。

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

提示:红帽官方的包并没有收录Nginx,可能是因为Nginx的许可证模式跟GNUGPL不一致吧。

写到这里我也不禁感概,欧美地区的人真太TMD的牛逼,一言不合就开发个软件,而且还能改变世界!

1.1.2目前常见的WEB服务器:

1Nginx服务器:

        堪称目前地球最强的WEB前端服务器,有两个王×××功能,分别是:静态页面处理和反向代理(可以代理httpftpmailphptomcat等)。静态文件处理能力比Apache强得多、且配置简单得多。目前并发量大的网站基本上都是使用Nginx(静态并发能力达到100000/秒)。

提示:要深入了解Nginx的功能,可以访问tengine.taobao.org网站(有中文说明,适合我这样的英语不太好的中国人,阿里强大啊!)

2Apache服务器:

        功能强大、插件丰富、跨平台(可以部署在LinuxUnixWindiows上)的WEB服务器,市场占有率最高,但有被Nginx超越的趋势。特点:稳定、可靠,但并发能力不强。

3Lighttpd服务器:

     Lighttpd是由一个德国人发起的开源项目,其根本目的是提供一个针对高性能网站,安全、快速、兼容性好并且灵活的WEB服务器,具有非常低的CPU和内存开销,性能很好,但社区不活跃。

4IBM WebSphere

     WebSphere Application Server是一种功能完善、开放的WEB应用程序服务器,是IBM电子商务计划的核心部分。基于javaServletsWEB应用程序运行环境,包含了WEB站点提供服务所需的一切,运行时可以协同并扩展ApacheNetscapeIISIBMHTTPWeb服务器。

5WindowsIISInternetInformation Server):

        原生于WindowsWEB服务器,只适合部署在Windows服务器上,全球前100的互联网WEB服务器基本上不使用(可能除了微软吧)。

6Tomcat服务器:

     Tomcat是一个开源的Serlvet容器,它是Apache基金会Jakarta项目中的一个核心项目,有ApacheSun和一些其它公司及个人共同开发而成。Tomcat既是一个Servlet容器,有具备传统的WEB服务器功能:可以解析静态html页面,但处理静态html能力远不能与Apache相比(Tomcat1024并发,Apache2000并发),实际应用中可以把ApacheTomcat组合到一起,Apache处理静态htmlTomcat处理jspServlet(即通常说的动静分离)。

提示:由于Tomcat并发能力比较低,所以只适合做小规模并发(应用中要提高Tomcat并发能力的话可以一台机器跑多个Tomcat,前提是服务器性能比较好),大规模并发需求的应用使用WeblogicJboss

1.2 Nginx安装和启动

    本文例子使用的系统和软件环境:

    操作系统:CentOS6.5 64位版

   IP地址:192.168.0.12/24

1.2.1以源代码方式编译安装

    红帽官方没有收录Nginx,因此没有rpm包,需要的话可以自己打包成rpm包。

1步:下载Nginx源代码包

    到Nginx官网http://nginx.org/下载需要的源码包,本文使用的版本是nginx/1.8.0

2步:下载编译Nginx需要使用的其它软件源代码包:pcreopenssl

    其实pcreopenssl包含在CentOS的官方Packages中,但在本文中我想使用不同版本的pcreopenssl,所以另外下载源代码包。

3步:设定编译参数并编译安装

[root@CentOS6lsrv02 nginx]# ll

total 5712

-rwx------ 1 root root 832104 Jul 10  2015nginx-1.8.0.tar.gz

-rwx------ 1 root root 4015794 Jul  3  2012openssl-1.0.0a.tar.gz

-rwx------ 1 root root 992502 Jul  3  2012 pcre-8.12.tar.bz2

[root@CentOS6lsrv02 nginx]# tar xf nginx-1.8.0.tar.gz -C /opt/src      解压nginx源码包到/opt/src

[root@CentOS6lsrv02 nginx]# tar xf pcre-8.12.tar.bz2 -C /opt/src        解压pcre源码包到/opt/src

[root@CentOS6lsrv02 nginx]# tar xf openssl-1.0.0a.tar.gz -C/opt/src   解压openssl源码包到/opt/src

[root@CentOS6lsrv02 nginx]# cd /opt/src/nginx-1.8.0/

[root@CentOS6lsrv02 nginx-1.8.0]# ./configure \

> --prefix=/opt/nginx

> --with-http_stub_status_module \

> --with-pcre=/opt/src/pcre-8.12/ \

> --with-http_ssl_module \

> --with-openssl=/opt/src/openssl-1.0.0a/

[root@CentOS6lsrv02 nginx-1.8.0]# make && make install

参数解释:

--prefix=/opt/nginx:指定nginx安装路径。

--with-http_stub_status_module:开启Nginx的状态检测模块。

--with-pcre=/opt/src/pcre-8.12/:指定pcre源代码包的路径。使用CentOS官方自带的pcre需要先安装pcre-devel包(yum install -y pcre-devel),安装后不需要指定路径。

--with-http_ssl_module:启用ssl安全模块。

--with-openssl=/opt/src/openssl-1.0.0a:指定openssl源代码包的路径。使用CentOS官方自带的openssl需要先安装openssl-develyum install -y openssl-devel),安装后不需要指定路径。

安装完后:用ldd查看nginx动态链接库的关系

[root@CentOS6lsrv02 nginx-1.8.0]# ldd /opt/nginx/sbin/nginx

        linux-vdso.so.1=>  (0x00007fffe8788000)

        libpthread.so.0=> /lib64/libpthread.so.0 (0x000000387c400000)

        libcrypt.so.1 =>/lib64/libcrypt.so.1 (0x0000003a44600000)

        libdl.so.2 =>/lib64/libdl.so.2 (0x0000003a40a00000)

        libz.so.1 =>/lib64/libz.so.1 (0x0000003a41e00000)

        libc.so.6 =>/lib64/libc.so.6 (0x0000003a40e00000)

       /lib64/ld-linux-x86-64.so.2 (0x0000003a40600000)

        libfreebl3.so =>/lib64/libfreebl3.so (0x0000003a43a00000)

提示:通过以上参数编译出来的nginx并没有依赖 pcre 和 openssl 的库,原因是这种方式把 pcre 和 openssl 都编译进nginx了,不需要使用安装在系统的 pcre和 openssl

以下是使用系统系统安装的pcre-developenssl-devel编译的结果:

 [root@CentOS6lsrv02nginx-1.8.0]# ./configure \

> --prefix=/opt/nginx-redhat \

> --with-http_stub_status_module \

> --with-http_ssl_module \

> --with-pcre       <--这项可以不加,nginx默认会使用pcre

[root@CentOS6lsrv02 nginx-1.8.0]# make && make install

[root@CentOS6lsrv02 nginx]# ldd /opt/nginx-redhat/sbin/nginx

        linux-vdso.so.1=>  (0x00007fffda7ff000)

        libpthread.so.0=> /lib64/libpthread.so.0 (0x000000387c400000)

        libcrypt.so.1 =>/lib64/libcrypt.so.1 (0x0000003a44600000)

        libpcre.so.0 =>/lib64/libpcre.so.0 (0x000000387d800000)         看到吧,有引用pcre

        libssl.so.10 =>/usr/lib64/libssl.so.10 (0x000000387c800000)    引用openssl的库

        libcrypto.so.10=> /usr/lib64/libcrypto.so.10 (0x0000003a46e00000)

        libdl.so.2 =>/lib64/libdl.so.2 (0x0000003a40a00000)

        libz.so.1 =>/lib64/libz.so.1 (0x0000003a41e00000)

        libc.so.6 =>/lib64/libc.so.6 (0x0000003a40e00000)

       /lib64/ld-linux-x86-64.so.2 (0x0000003a40600000)

        libfreebl3.so =>/lib64/libfreebl3.so (0x0000003a43a00000)

        libgssapi_krb5.so.2=> /lib64/libgssapi_krb5.so.2 (0x000000387d000000)

        libkrb5.so.3 =>/lib64/libkrb5.so.3 (0x000000387cc00000)

        libcom_err.so.2=> /lib64/libcom_err.so.2 (0x000000387d400000)

        libk5crypto.so.3=> /lib64/libk5crypto.so.3 (0x0000003a47600000)

        libkrb5support.so.0=> /lib64/libkrb5support.so.0 (0x0000003a46600000)

        libkeyutils.so.1=> /lib64/libkeyutils.so.1 (0x0000003a47a00000)

        libresolv.so.2=> /lib64/libresolv.so.2 (0x0000003a43200000)

        libselinux.so.1=> /lib64/libselinux.so.1 (0x0000003a42200000)

1.2.2启动和关闭Nginx

1)启动nginx

Nginx官方默认没有启动脚本,使用绝对路径运行命令启动

[root@CentOS6lsrv02 ~]# /opt/nginx/sbin/nginx      启动nginx,默认不会有提示

[root@CentOS6lsrv02 ~]# pstree -aunpl|grep nginx

  |   |      `-vim,16705 nginx.conf

  |           `-grep,16742 --color=auto nginx

  `-nginx,16736                           nginx使用父子进程方式,默认是1个子进程,我修改为4个,根据服务器使用的CPU核心总数设置。

      |-nginx,16737,nobody <--默认启动nginx子进程的用户为nobody,可以修改。

      |-nginx,16738,nobody

      |-nginx,16739,nobody

`-nginx,16740,nobody

2)关闭nginx

使用killkill -15停止nginx,此为正常关闭nginx的方式

1.3 Nginx网站服务配置事例

nginx 成功启动后,默认可以访问了,在浏览器输入服务器IP地址192.168.0.12

fe574026d4a12118780412c0511e0448.jpg

到此,nginxWEB站点已经搭建成功,只要把网站的数据拷贝到/opt/nginx/html/目录下,就可以了。简单吧!!!

1.3.1配置一个简单的静态WEB服务器

以下是一个最基础的静态WEB站点设置:

vi /opt/nginx/conf/nginx.conf

     1#----------全局设置区开始----------

     2  #user nobody;

     3  worker_processes  4;    <--设置Nginx服务器启动的子进程数,根据服务器使用的CPU核心总数设定,本文使用的机器是4核心的CPU,支持超线程的CPU一个核心设置2个子进程是没有问题的

     4

     5  #error_log logs/error.log;

     6  #error_log logs/error.log  notice;

     7  error_log /var/log/nginx/error.log  info;    <--定义错误日志目录,默认值             为logs/error.log  info;表示默认在nginx安装目录下的logs目录下面,日志记录级别为info

     8

     9  pid       /var/run/nginx.pid;  <--设置nginx进程文件所在位置(默认值为logs/nginx.pid;表示默认在nginx安装目录下的logs目录下面)

    10

    11  events {

    12      worker_connections  15000;    <--设置Nginx并发数

    13  }

    14#----------全局设置区结束----------

    15  http {      <--定义Nginx代理的http协议段开端

    16      include       mime.types;    <--该文件定义Nginx能处理的文件类型及对文件的处理方法,可以在该文件中添加类型

    17      default_type  application/octet-stream;<--Nginx不能处理的文件都识别为二进制,在用户客户端浏览器弹出对话框,让用户下载该文件

    18

    19      log_format  main '$remote_addr - $remote_user [$time_local] "$request" '

    20                                  '$status$body_bytes_sent "$http_referer" '

    21                                  '"$http_user_agent" "$http_x_forwarded_for"';

    22    #log_format定义日志变量“main”,后面是日志记录的格式,可以自定义日志变量名字和格式

    23      #access_log  logs/access.log  main;

    24

    25      sendfile        on;    <--开启快速文件传输

    26      tcp_nopush     on;    <--这项设置意思是当nginx非常繁忙时(nginx hold不住啦!!!!)就暂时不要把新的连接请求发送到应用层的nginx了,暂存在传输层吧

    27

    28      #keepalive_timeout  0;

    29      keepalive_timeout  30;<--保持连接30秒,根据客户端浏览器设定,通常IE30秒,Firefox15秒等,这个值是服务器和客户端程序共同决定的

    30      gzip on;<--开启压缩

    31

    32      server {    <--虚拟主机段开端

    33          listen       80;    <--监听端口

    34          server_name  localhost;<--主机头,即域名

    35

    36          charset utf8;<--设置虚拟主机使用的字符集(默认是koi8-r,修改为utf8比较通用)

    37          access_log  /var/log/localhost-access.log  main;    <--这里的设置会覆盖全局区第23行的设置,表示启用访问日志,日志格式使用前面由log_format定义的格式“main”

    38

    39          location / {   <--万能location,匹配任何路径

    40              root   html;           <--定义站点根目录位置,如:/www/html,默认在nginx安装目录下的html目录

    41              index  index.html index.htm;    <--站点首页索引顺序

    42          }

    43

    44          error_page  404             /404.html;    <--定义404错误(找不到页面)响应文件名,放在站点根目录下

    45         error_page403  /403.html;    <--定义403错误(禁止访问)响应文件名,放在站点根目录下

    46          # redirect server error pages to thestatic page /50x.html

    47          #

    48          error_page   500 502 503 504  /50x.html;    <--定义500以上错误响应文件名,放在站点跟目录下

    49          location = /50x.html {

    50              root   html;

    51          }

    52      }    <--虚拟主机段结束

    53  }    <--定义Nginx代理的http协议段结束


小结:本文是关于Nginx安装和配置一个静态WEB站点的最简单的方法,后续我将会继续发布关于Nginx的更高级应用,会逐步扩展到大型WEB集群的应用,希望对技术感兴趣的小伙伴继续关注我的技术博客!!!!!!