Nginx web服务器

来源:互联网 发布:大数据应用在公众用户 编辑:程序博客网 时间:2024/05/16 14:21

一、nginx的概述及常见Web服务器的介绍:
Unix和Linux平台下的常用Web服务器有Apache、 Nginx、 Lighttpd、 Tomcat、 IBM WebSphere等。其中目前应用最广泛的Web服务器是Apache。 Windows平台下最常用的服务器则是微软公司的IIS(Internet Information Server)。

1)Apache服务器
Apache 起初由 Illinois 大学 Urbana-Champaign 的国家高级计算程序中心开发。此后Apache 被开放源代码团体的成员不断的发展和加强。1996年4月以来,Apache一直是Internet上最流行的HTTP服务器,1999年5月它在 57% 的网页服务器上运行,到了2005年7月这个比例上升到69%。Apache是目前世界上用的最多的Web服务器,它有优势主要在于源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Linux、Windows系统平台之上)。Apache的模块支持非常丰富,以至于它提供了非常完善的功能。
 Apache的官方网站: http://www.apache.org

2)Lighttpd 服务器
Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。Lighttpd是众多OpenSource轻量级的Web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在Lighttpd 上很多功能都有相应的实现了,这点对于Apache的用户是非常重要的,因为迁移到Lighttpd就必须面对这些问题。
Lighttpd的官方网站: http://www.lighttpd.net

3)Tomcat服务器
Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。Tomcat即是一个Jsp和Servlet的运行平台。同时Tomcat又不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面,但是与Apache相比,它的处理静态Html的能力就不如Apache,我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。
Tomcat的官方网站: http://tomcat.apache.org

4)IBM WebSphere (weblogic/jboss)
WebSphere Application Server 是 一 种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分。基于Java和Servlets的Web应用程序运行环境,包含了为Web站点提供服务所需的一切,运 行 时 可 以 协 同 并 扩 展Apache、Netscape、 IIS 和IBM 的HTTPWeb服务器,因此可以成为强大的Web应用服务器。
WebSphere的官方网站: http://www.ibm.com

5)Windows IIS
IIS 是Internet Information Server的缩写,它是微软公司主推的服务器。IIS与Window NT Server完全集成在一起,因而用户能够利用Windows NT Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。 IIS支持HTTP(Hypertext Transfer Protocol,超文本传输协议),FTP(File Transfer Protocol,文件传输协议)以及SMTP协议,通过使用CGI和ISAPI,IIS可以得到高度的扩展。
IIS的官方网站: http://www.iis.net

6)Nginx的介绍
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP/FTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
在俄罗斯许多大网站都已经使用它, 且一直表现不凡。截至2007年4月,俄罗斯大约有20%左右的虚拟主机是由nignx服务或代理的。Google在线安全博客中统计Nginx服务或代理了大约所有Internet虚拟主机的4%。而Netcraft的统计显示,Nginx服务的主机在过去的一年里以四倍的速度增长并且在这几年里,它的排名还在不断上升,下图为Netcraft截止至2012年1月的统计。

 

 

NGINX安装及启动

 1)安装nginx需要用到依赖的包

1.openssl-devel

2.pcre   -----用于让nginx支持正则表达式

# tar xf nginx-1.4.7.tar.gz -C /usr/local/

# cd nginx-1.4.7

# ./configure --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module

# make & make install

 

2) nginx运行控制

vim /opt/nginx/conf/nginx.conf

 /opt/nginx/sbin/nginx -t 检查配置文件有没错误

/opt/nginx/sbin/nginx -----启动

netstat -anlp | grep :80  ------查看是否已经在监听

关闭pkill -15 nginx ---正常关闭nginx

可以通过自己写脚本进行对nginx进行启动或关闭

 

NGINX的网站配置实例

vim /opt/nginx/conf/nginx.conf

user nobody    -----决定以什么用户启动进程

worker_processes  1;    --指定衍生进程数量的数量,这个根据CPU的核数来设置,4核这里设置的就是8
error_log  logs/error.log  notice;  --定义错误日志及日志级别
pid        logs/nginx.pid;    --主进程号
events {
    worker_connections  1024;   --每个进程的最大连接数是多少,最大是51200,总连接数=进程数x连接数
    use epoll;      --在内核中使用epoll的网络IO算法,目前最高效的算法
}

########################以上是全局配置

 

http {      --nginx代理http协议,还可以代理ftp/mail等协议
    include       mime.types;         --外部调用文件类型映射表
    default_type  application/octet-stream;       --默认支持的文件类型
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' --指定日志的格式
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;        --全局访问日志,并调用上面main中定义的日志格式
    sendfile        on;            --使用高效的文件传输
    tcp_nopush     on;           --防止TCP阻塞
    keepalive_timeout  30;           --长链接超时时间
    gzip  on;             --支持压缩传输,提高传输速度
    server {              --server{}第一个虚拟主机
        listen       80;            --监听端口
        server_name  localhost;          --主机头(域名)
        charset utf-8;            --web服务器的语言编码
        access_log  logs/host.access.log  main;       --虚拟主机独立的访问日志
        location / {            --匹配url地址中有"/",则执行花括号中的配置
            root   html;            --虚拟主机的本地目录,完整路径:/opt/nginx/html,也可写绝对路径
            index  index.html index.htm;        --默认索引的首页格式及顺序
        }
        error_page   500 502 503 504  /50x.html;       --定义错误页面
        location = /50x.html {
            root   html;
        }
    }

 

 四、针对不同的虚拟主机添加 nginx 状态统计
利用Nginx自带的http_stub_status模块,可以实现简单的站点连接、请求数统计。要使用该功能,需要在编译nginx的时候,增加“--with-http_stub_status_module”配置项(此模块只能针对虚拟主机)
在server { …… }配置部分中添加一项location
# vim /opt/nginx/conf/nginx.conf
        location ~* ^/Status {
                stub_status on;  --开启状态统计模块
        }

查看页面统计:
# firefox http://192.168.1.10/status
# ab -n 100000 -c 5000 http://192.168.1.10/  --在另一台机器上来压测nginx服务器

 

五、Nginx下的虚拟主机配置
1、基于端口的虚拟主机:
# vim /opt/nginx/conf/nginx.conf
    server {
         listen       8080;

        location / {
            root   /opt/nginx/html/vm01;
            index  index.html index.htm;
        }
    }

    server {
         listen       8081;

        location / {
            root   /opt/nginx/html/vm02;
            index  index.html index.htm;
        }
    }

# mkdir /opt/nginx/html/vm01
# mkdir /opt/nginx/html/vm02
# vim /opt/nginx/html/vm01/index.html
this is vm01
# vim /opt/nginx/html/vm02/index.html
this is vm02

# service nginx restart  
# netstat -tnlp |grep 808      
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      26482/nginx.conf   
tcp        0      0 0.0.0.0:8081                0.0.0.0:*                   LISTEN      26482/nginx.conf

# elinks http://192.168.1.10:8080
# elinks http://192.168.1.10:8081


2、基于IP的虚拟主机(在原来做基于端口的虚拟主机上更改):
# ifconfig eth0 192.168.1.10
# ifconfig eth0:0 192.168.1.11

# vim /opt/nginx/conf/nginx.conf
    server {
         listen       192.168.1.10:80;

        location / {
            root   /opt/nginx/html/vm01;
            index  index.html index.htm;
        }
    }
    server {
         listen       192.168.1.11:80;

         location / {
            root   /opt/nginx/html/vm02;
            index  index.html index.htm;
        }
    }
# service nginx restart  
# elinks http://192.168.1.10
# elinks http://192.168.1.11


3、基于相同IP的不同主机头的虚拟主机:
# vim /etc/hosts
192.168.1.10            www.abc.com
192.168.1.10            www.bcd.com
192.168.1.10            www.def.com

# vim /opt/nginx/conf/nginx.conf
    server {
         listen       80;
         server_name  www.abc.com;

        location / {
            root   /opt/nginx/html/vm01;
            index  index.html index.htm;
        }
    }
    server {
         listen         80 default;
         server_name    www.bcd.com;
         location / {
            root   /opt/nginx/html/vm02;
            index  index.html index.htm;
        }
    }

# service nginx restart
# elinks www.bcd.com           
# elinks www.abc.com


六、访问控制

目录的访问控制:
 1、根据账号密码进行访问控制
 2、根据客户端的源地址进行访问控制
 3、结合location的正则表达式和文件类型做访问控制

对http://192.168.1.10/status访问时需要输入密码
# vim /opt/nginx/conf/nginx.conf
        location ~* ^/Status {
                stub_status on;
                auth_basic "status login";
                auth_basic_user_file  "/opt/nginx/conf/.htpasswd";
  deny 192.168.0.254;
  allow 192.168.0.0/24;  --源地址的访问控制是按顺序自上而下来匹配,所以拒绝的规则写在允许规则的前面
        }
# yum -y install httpd --安装apache以获取htpasswd命令
# htpasswd -c /opt/nginx/conf/.htpasswd user01 --创建用户user01
# service nginx reload

打开浏览器访问:http://192.168.1.10/status,输入用户名和密码访问

结合正则表达式和文件类型做访问控制:
location ~* \.(txt|doc)$ {
 root html/test;
 deny all;  --拒绝所有
}

禁止以/data开头的文件
location ~ ^/data {
         deny all;
     }

禁止单个目录
location  = /searchword/cron/ {
         deny all;
     }

~ 代表匹配正则表达式
~* 匹配时忽略大小写
\. 转义
(txt|doc)$ 以txt结尾或者doc结尾

七、配置Nginx实现https:
# cd /etc/pki/tls/certs
# make server.key      --生成私钥
# openssl rsa -in server.key -out server.key --把私钥中的密码去掉
# make server.csr      --生成证书颁发机构
# openssl x509 -in server.csr -req -signkey server.key -days 365 -out server.crt  --使用私钥来颁发签名的公钥

# vim /opt/nginx/conf/nginx.conf
    server {
        listen       443;
        server_name  www.def.com;

        ssl                  on;
        ssl_certificate      /etc/pki/tls/certs/server.crt;
        ssl_certificate_key  /etc/pki/tls/certs/server.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;

        location / {
            root   /opt/nginx/html/vm03;
            index  index.html index.htm;
        }
    }
# service nginx restart
# netstat -tnlp |grep 443
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      26669/nginx.conf

# mkdir /opt/nginx/html/vm03
# vim /opt/nginx/html/vm03/index.html
this is vm03

最后打开浏览器访问

 

0 0
原创粉丝点击