第1章 Nginx 网站服务

1.1 web网站服务介绍:

1.1.1 提供静态服务的软件

Apache:这是中小型Web服务的主流,Web服务器中的老大哥。

Nginx:大型网站Web服务的主流,曾经Web服务器中的初生牛犊,现已长大。

       Nginx的分支Tenginehttp://tengine.taobao.org/)目前也在飞速发展。

Lighttpd:这是一个不温不火的优秀Web软件,社区不活跃,静态解析效率很高。在Nginx流行前,它是大并发静态业务的首选,国内百度贴吧、豆瓣等众多网站都有Lighttpd奋斗的身影。

1.1.2 提供动态服务的软件

PHPFastCGI):大中小型网站都会使用,动态网页语言PHP程序的解析容器。它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程模式,而是mod_php5.somodule)。也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务。(.php)

Tomcat:中小企业动态Web服务主流,互联网Java容器主流(如jspdo)。

Resin:大型动态Web服务主流,互联网Java容器主流(如jspdo)。

IISInternet information services):微软windows下的Web服务软件(如aspaspx

1.2 Nginx web服务部署及说明

1.2.1 Nginx 软件特点

1. 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)

2. 资源消耗少:在3万并发连接下,开启10Nginx线程消耗的内存不到200MB

3. 可以做HTTP反向代理及加速缓存、即负载均衡功能,内置对RS节点服务器健康检查功能,

   这相当于专业的Haproxy软件或LVS的功能。

4. 具备Squid等专业缓存软件等的缓存功能。

5. 支持异步网络I/O事件模型epollnginx-selectapache)(Linux 2.6+

1.2.2 Nginx 软件部署(编译安装)

#第一个里程:下载nginx程序软件包并解压

mkdir /server/tools -p

cd /server/tools

wget http://nginx.org/download/nginx-1.14.0.tar.gz

tar xf nginx-1.14.0.tar.gz

 

#第二个里程:解决软件依赖问题

yum install openssl-devel pcre-devel -y

openssl-devel --- 为了让nginx服务可以实现https访问的功能

pcre-devel    --- 兼容perl语言的正则表达式(^ shell:以什么开头  perl^/

                  nginx使用时会应用一个参数rewrite 正则表达式信息(perl

#第三个里程:创建worker进程的管理用户

useradd -s /sbin/nologin -M www

#第四个里程:编译安装软件过程

#编译安装软件三部曲

#01.进行软件的配置

mkdir /server/tools -p

cd /server/tools

cd nginx-1.14.0

./configure --prefix=/application/nginx-1.14 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

#02.进行软件的编译(将各个语言编写代码翻译成系统可以识别的二进制信息)

make

 

#03.进行编译安装(将软件最终安装到系统中)

make install

#重要配置参数总结

--prefix=PATH                      set installation prefix

                                   设置软件程序安装到哪个目录,指定的目录不需要创建出来

--user=USER                        set non-privileged user for worker processes

--group=GROUP                      set non-privileged group for worker processes

--with-http_ssl_module             enable ngx_http_ssl_module(可以实现https

--with-http_stub_status_module     enable ngx_http_stub_status_module(主要用于监控服务运行状态)

#第五个里程:创建程序软链接

ln -s /application/nginx-1.14/ /application/nginx

[root@web01 application]# ll /application/nginx-1.14/

total 16

drwxr-xr-x 2 root root 4096 May 16 10:49 conf

drwxr-xr-x 2 root root 4096 May 16 10:49 html

drwxr-xr-x 2 root root 4096 May 16 10:49 logs

drwxr-xr-x 2 root root 4096 May 16 10:49 sbin

#第六个里程:启动nginx服务

/application/nginx/sbin/nginx

1.2.3 Nginx 安装目录及命令解释

目录

说明

conf    

--- 所有nginx相关的配置文件保存目录

nginx.conf

--- nginx程序主配置文件

html

--- 表示web服务站点目录

logs

--- 日志目录

sbin

--- 程序命令保存目录



Nginx命令参数说明:

nginx  –help   -----查询nginx的帮助信息

Options:

  -?,-h         : this help

  -v            : show version and exit

                  显示软件版本信息并退出

  -V            : show version and configure options then exit

                  显示版本信息和配置参数信息并退出

  -t            : test configuration and exit

                  配置文件语法检查(ansible语法检查功能)

  -T            : test configuration, dump it and exit

                  配置文件语法检查,将配置文件信息显示出来

  -q            : suppress non-error messages during configuration testing

  -s   signal     : send signal to a master process: stop, quit, reopen, reload

                  发送一个信号给master进程

  -p   prefix     : set prefix path (default: /usr/share/nginx/)

  -c   filename   : set configuration file (default: /etc/nginx/nginx.conf)

  -g   directives : set global directives out of configuration file  

1.2.4 Nginx 主配置文件nginx.conf


Nginx 网站服务——虚拟主机配置_第1张图片


Nginx 网站服务——虚拟主机配置_第2张图片

1.2.5 Nginx 站点目录及首页文件概念说明

Nginx 网站服务——虚拟主机配置_第3张图片

1.3 Nginx 虚拟主机配置

1.3.1 虚拟主机的概念

所谓虚拟主机,在Web服务里就是一个独立的网站站点,这个站点对应独立的域名

(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服务供用户访问

这个独立的站点在配置里是由一定格式的标签段标记的,对于Apache软件来说

一个虚拟主机的标签段通常被包含在内,而Nginx软件则

使用一个server{}标签来标示一个虚拟主机。一个Web服务里可以有多个虚拟主机标签

对,即可以同时支持多个虚拟主机站点。

1.3.2 虚拟主机的类型

·常见的虚拟主机类型有如下几种。

1)基于域名的虚拟主机

所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域

名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站使用的都

是基于域名的虚拟主机,例如:www.etiantian.org

2)基于端口的虚拟主机

同理,所谓基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主

机,此类虚拟主机对应的企业应用主要为公司内部的网站,例如:一些不希望直接对

外提供用户访问的网站后台等,访问基于端口的虚拟主机,地址里要带有端口,例如:

http://www.etiantian.org:9000

3)基于IP的虚拟主机

同理,所谓基于IP的虚拟主机,意思就是通过不同的IP区分不同的虚拟主机,此

类虚拟主机对应的企业应用非常少见。一般不同的业务需要使用多IP的场景都会在负

载均衡器上进行VIP绑定,而不是在Web上绑定IP来区分不同的虚拟机。

1.3.3 基于域名的虚拟主机配置

第一步:申请域名信息

先进行购买,域名备案,在申请域名网站上,可以进行A记录的配置 www.oldboy.com -- 服务器公网IP地址

第二步:编写配置文件  ----- nginx.conf

server {

    listen       80;

    server_name  www.etiantian.org;

    root   html/www;

    index  index.html index.htm;

    }  

server {

    listen       80;

    server_name  bbs.etiantian.org;

    root   html/bbs;

    index  index.html index.htm;

    }  

server {

    listen       80;

    server_name  blog.etiantian.org;

    root   html/blog;

    index  index.html index.htm;

    }       

第三步:检查配置文件语法信息

nginx -t

第四步:创建虚拟主机站点目录,创建虚拟主机首页文件

mkdir -p /application/nginx/html/{www,bbs,blog}

[root@web01 nginx]# for name in www bbs blog;do echo "10.0.0.7 $name.etiantian.org" >/application/nginx/html/$name/index.html;done

[root@web01 nginx]# for name in www bbs blog;do cat /application/nginx/html/$name/index.html;done

10.0.0.7 www.etiantian.org

10.0.0.7 bbs.etiantian.org

10.0.0.7 blog.etiantian.org

第五步:进行DNS解析(配置hosts

配置hosts文件:

01. windows中要进行配置

02. Linux中也要进行配置

第六步:配置文件修改后要进行重启服务

nginx -s reload

1.3.4 基于端口的虚拟主机配置

第一里程:修改配置文件

server {

    listen       80;   

    server_name  www.etiantian.org;

    root   html/www;

    index  index.html index.htm;

    }  

server {

    listen       81;

    server_name  bbs.etiantian.org;

    root   html/bbs;

    index  index.html index.htm;

    }  

server {

    listen       82;

    server_name  blog.etiantian.org;

    root   html/blog;

    index  index.html index.htm;

    }       

第二里程:平滑重启nginx服务

nginx -s reload

第三里程:进行访问测试

netstat -lntup|grep nginx

tcp   0   0 0.0.0.0:80       0.0.0.0:*         LISTEN      19363/nginx

tcp   0   0 0.0.0.0:81       0.0.0.0:*         LISTEN      19363/nginx

tcp   0   0 0.0.0.0:82       0.0.0.0:*         LISTEN      19363/nginx

1.3.5 基于IP的虚拟主机配置

第一里程:编写配置文件,监听本地网卡上有的IP地址

server {

    listen       10.0.0.7:80;

    server_name  www.etiantian.org;

    root   html/www;

    index  index.html index.htm;

}

server {

    listen       10.0.0.8:80;

    server_name  bbs.etiantian.org;

    root   html/bbs;

    index  index.html index.htm;

    }

第二里程:重启nginx服务

重点强调:nginx服务配置文件中只要涉及到IP地址的修改,都要重启nginx服务,而不是平滑重启

nginx -s stop && nginx

第三里程:进行访问测试

curl  10.0.0.7

curl  10.0.0.8

1.4 Nginx 常用功能配置

1.4.1 规范优化Nginx配置文件

·目的:每一个虚拟主机都生成一个单独的配置文件

第一个里程:创建一个虚拟主机配置文件保存目录

[root@web01 conf]# pwd

/application/nginx/conf

[root@web01 conf]# mkdir extra

第二个里程: 生成虚拟主机配置文件

/application/nginx/conf

[root@web01 conf]# sed -n '10,15p' nginx.conf >extra/www.conf

[root@web01 conf]# sed -n '16,21p' nginx.conf >extra/bbs.conf

[root@web01 conf]# sed -n '22,27p' nginx.conf >extra/blog.conf

[root@web01 conf]# cat extra/*

server {

    listen       80;

    server_name  bbs.etiantian.org;

    root   html/bbs;

    index  index.html index.htm;

    }

server {

    listen       80;

    server_name  blog.etiantian.org;

    root   html/blog;

    index  index.html index.htm;

    }

server {

    listen       80;

    server_name  www.etiantian.org;

    root   html/www;

    index  index.html index.htm;

    }

说明:虚拟主机文件配置完毕,要将nginx中的虚拟主机配置信息删除

 

第三个里程:编写nginx主配置文件,加载虚拟主机配置文件  ---nginx.conf

worker_processes  2;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    include       extra/www.conf;

include       extra/blog.conf;

include       extra/bbs.conf;

}

####也可用 include       extra/*;  表示extra目录下的所有配置文件。

第四个里程:重启nginx服务

nginx -s reload

1.4.2 配置Nginx 服务别名功能(主要用于测试)

#####修改配置文件

server {

    listen       80;

    server_name  www.etiantian.org www.et.org;

    root   html/www;

    index  index.html index.htm;

}

#####检查语法

nginx -t

#####平滑重启nginx

nginx -s reload

####说明:配置别名也需要做好DNS解析

1.4.3 Nginx 状态模块页面配置

Nginx软件在编译时有一个with-http_stub_status_module模块,这个模块功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态。要想使用状态模块,在编译时必须增加--with-http_stub_status_module参数。

 

可通过如下方法检测编译安装Nginx时是否设定上述模块支持:

[root@web01 ~]# nginx -V

nginx version: nginx/1.14.0

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --prefix=/application/nginx-1.14.0 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module

第一个里程:编写配置文件

# 编写一个status虚拟主机配置文件

cp extra/www.conf extra/status.conf

    server {

    listen       80;

    server_name  status.etiantian.org;

    stub_status;

    #root   html/www;

    #index  index.html index.htm;

    }

# 编写主配置文件,调用status虚拟主机配置文件

worker_processes  2;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    include       extra/www.conf;

    include       extra/bbs.conf;

    include       extra/blog.conf;

    include       extra/status.conf;

}

第二个里程:重启nginx服务

nginx -t    #--------检查语法

nginx -s reload   ###-------平滑重启

第三个里程:进行DNS解析处理

第四个里程:进行测试访问

[root@web01 ~]# curl status.etiantian.org

Active connections: 1

server accepts handled requests

 6926 6926 7067

Reading: 0 Writing: 1 Waiting: 0