期中集群架构-第八章-期中架构nginx章节
======================================================================

01. web服务软件种类介绍
常用来提供静态Web服务的软件有如下三种:
Apache:
         这是中小型Web服务的主流,Web服务器中的老大哥。
Nginx:
         大型网站Web服务的主流,曾经Web服务器中的初生牛犊,现已长大。
         Nginx的分支Tengine(http://tengine.taobao.org/)目前也在飞速发展。
Lighttpd:
         这是一个不温不火的优秀Web软件,社区不活跃,静态解析效率很高。
         在Nginx流行前,它是大并发静态业务的首选,国内百度贴吧、豆瓣等众多网站都有Lighttpd奋斗的身影。

常用来提供动态服务的软件
PHP(FastCGI):
       大中小型网站都会使用,动态网页语言PHP程序的解析容器。
       它可配合Apache解析动态程序,不过,这里的PHP不是FastCGI守护进程模式,而是mod_php5.so(module)。
       也可配合Nginx解析动态程序,此时的PHP常用FastCGI守护进程模式提供服务。
Tomcat:
       中小企业动态Web服务主流,互联网Java容器主流(如jsp、do)。
Resin:
       大型动态Web服务主流,互联网Java容器主流(如jsp、do)。

02. nginx软件服务介绍
   如果你听说或使用过Apache软件,那么很快就会熟悉Nginx软件,与Apache软件类似,
   Nginx(“engine x”)是一个开源的,支持高性能、高并发的WWW服务器和代理服务软件。
   它是由俄罗斯人lgor Sysoev开发的,最初被应用在俄罗斯的大型网站www.rambler.ru上。
   后来作者将源代码以类BSD许可证的形式开源出来供全球使用。
   Nginx可以运行在UNIX、Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中

03. nginx软件特征介绍
   · 支持高并发:  能支持几万并发连接(特别是静态小文件业务环境)
   · 资源消耗少:  在3万并发连接下,开启10个Nginx线程消耗的内存不到200MB
    特征· 支持异步网络I/O事件模型epoll(Linux 2.6+)    而apache(select)相比较epoll而言效率低

04. nginx软件功能介绍
   1)作为Web服务软件(处理用户访问静态请求)
   2)反向代理负载均衡服务
   3)前端业务数据缓存服务

05. nginx软件模型特点说明
apache与nginx软件对比说明???
   apache使用select模型
   nginx使用epoll模型
举例说明:宿舍管理员
   select模型版管理员 会一个一个房间查询人员
   epoll模型版管理员 会进行检索后,直接找到需要找的人
举例说明:幼儿园阿姨
   select模型版阿姨 会一个一个小朋友进行询问,确认哪个小朋友需要上厕所
   epoll模型版阿姨 会告知想上厕所小朋友自觉站到响应位置

06. nginx软件编译安装
第一个里程:软件依赖包安装
   pcre-devel: perl语言正则表达式兼容软件包
   openssl-devel:使系统支持https方式访问
   yum install -y pcre-devel openssl-devel

第二个里程:创建一个管理nginx进程的虚拟用户
   useradd www -s /sbin/nologin/ -M

第三个里程:下载并解压nginx软件
   cd /server/tools
   wget http://nginx.org/download/nginx-1.12.2.tar.gz
   tar xf nginx-1.12.2.tar.gz

第四个里程:进行软件编译安装
软件编译安装三部曲:
①. 编译配置

进入解压出的软件目录配置

配置命令

./configure --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
   --prefix=PATH    指定软件安装在什么目录下
   --user=USER     指定软件worker进程管理用户,利用www虚拟用户管理worker进程
   --group=USER
   --with-http_ssl_module                   使nginx程序可以支持HTTPsF访问功能
   --with-http_stub_status_module    用于监控用户访问nginx服务情况

时提示以下错误:

checking for OS
 + Linux 2.6.32-431.el6.x86_64 x86_64

checking for C compiler ... not found

解决:

执行以下命令:

  1. yum -y install gcc gcc-c++ autoconf automake make

②. 编译过程

make  然后查看是否成功echo $?

③. 编译安装

make install

第五个里程:为nginx程序软件创建链接目录
   ln -s /application/nginx-12.2 /application/nginx

方便开发人员调取程序目录

第六个里程:启动nginx程序服务
   /application/nginx/sbin/nginx 唯一命令

浏览器输入Nginx服务器地址查看是否部署成功

07. nginx软件程序目录结构

conf --- nginx程序所有配置文件保存目录

默认就有备份文件

nginx.conf

nginx程序主配置文件
   精简nginx.conf配置文件内容:
   grep -Ev "#|^$" nginx.conf.default >nginx.conf
   egrep -v "#|^$" nginx.conf.default  >nginx.conf

nginx配置文件组成:
   ①. main nginx       主区块
   ②. event nginx      事件区块
   ③. http nginx http  功能区块
   ④. server nginx     网站主机区块
   ⑤. location nginx  匹配或者定位区块

ps -ef|grep nginx 查看进程

master: 主进程 管理服务运行状态,kill掉就会关闭进程

worker: 用户访问时worker进行处理

worker_processes 1; --worker 进程的数量
events {                          --事件区块开始
     worker_connections 1024; --每个worker进程支持的最大连接数

}                                                        --事件区块结束
http {                                                --http区块开始
     include mime.types;
     default_type application/octet-stream;
     sendfile on;
     keepalive_timeout 65;
     server {
          listen 80;
          server_name localhost;
          location / {
               root html;
               index index.html index.htm;
          }
          error_page 500 502 503 504 /50x.html;
          location = /50x.html {
          root html;
          }
     }
}

worker 进程数和支持数可优化

mime.types媒体文件 就在conf的目录里调用的相对路径

65 单位秒  超时没数据传输就断开连接,可优化

sever区块就是一个网站;网站默认监听80端口

html --- nginx程序站点目录
logs --- nginx程序日志文件保存目录
sbin --- nginx程序命令所在目录
nginx命令参数说明:
   -V --- 查看nginx软件编译配置参数
   -t --- 检查nginx配置文件语法格式是否正确
   -s --- 用于管理nginx服务运行状态
      stop 停止nginx服务
      reload 平滑重启nginx服务器

重启nginx服务

nginx -s stop    先停止
      nginx                 再启动

08. 编写nginx服务配置
三个语法格式说明:
   ①. 大括号要成对出现
   ②. 每一行指令后面要用分号结尾
   ③. 每一个指令要放置在指定的区块中

实现编写一个网站页面
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
}
}

实现编写多个网站页面==编写多个虚拟主机(等于一个网站)
第一个里程编写配置文件:
server {
   listen 80;
   server_name www.etiantian.org;
   location / {
      root html/www;
      index index.html index.htm;
   }
}
server {
   listen 80;
   server_name bbs.etiantian.org;
   location / {
      root html/bbs;
      index index.html index.htm;
   }
}
server {
   listen 80;
   server_name blog.etiantian.org;
   location / {
      root html/blog;
      index index.html index.htm;
   }
}

第二个里程创建站点目录:
mkdir -p /application/nginx/html/{www,bbs,blog}

第三个里程创建站点目录下首页文件:
for name in www bbs blog

do

echo "10.0.0.7 $name.etiantian.org" >/application/nginx/html/$name/index.html

done

检查
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

第四个里程:进行访问测试
浏览器访问测试:
注意:需要编写windows主机hosts文件,进行解析
命令行访问测试:
利用curl命令在linux系统中访问测试
注意:需要编写linux主机hosts文件,进行解析

虚拟主机配置文件编写方法:
①. 基于域名的虚拟主机配置方法(最常用)
②. 基于端口的虚拟主机配置方法
说明:当你访问的网站域名在虚拟主机配置中不存在时,默认会将第一个虚拟主机的配置页面响应给用户
③. 基于IP地址的虚拟主机配置方法
说明:nginx服务中只要涉及IP地址的修改,都需要重启nginx服务,而不能采用平滑重启
第五:企业规范配置

把之前在nginx.conf中的配置扩展出来 到指定的文件中

然后在主配置文件中指定server配置

平滑重启ngonx

测试

09 Nginx服务日志信息
错误日志 访问日志
01. 错误日志
Syntax: error_log file [level];
Default:
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

vim nginx.conf
error_log /tmp/error.log error;

错误日志的默认文件可修改,备份配置文件里有说明

复制到主配置文件中

补充说明:

错误日志文件改为www_error.log

级别改为error

===========================================================================================
错误日志的,默认情况下不指定也没有关系,因为nginx很少有错误日志记录的。
但有时出现问题时,是有必要记录一下错误日志的,方便我们排查问题。
error_log 级别分为 debug, info, notice, warn, error, crit 默认为crit ,由低到高
该级别在日志名后边定义格式如下:
error_log /your/path/error.log crit;

crit 记录的日志最少,而debug记录的日志最多。
如果nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,
那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富
===========================================================================================

02. 访问日志(重点关注)
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;     --- 调用定义格式信息,生成访问日志

access_log生成日志  logs/生成的目录和名字

======================================

$remote_addr 10.0.0.1 --- 访问客户端的源地址信息
$remote_user - --- 访问客户端认证用户信息 ???
[$time_local] --- 显示访问时间
$request GET / HTTP/1.1 --- 请求行信息
$status 304 --- 状态码信息(304状态码利用缓存显示页面信息)
$body_bytes_sent --- 服务端响应客户端的数据大小信息
$http_referer --- 记录链接到网站的域名信息 ???
$http_user_agent --- 用户访问网站客户端软件标识信息
用户利用客户端浏览器测试访问时,win10默认浏览器会有异常问
$http_x_forwarded_for --- ??? 反向代理
官方链接:http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

03. 日志要进行切割
01. 利用shell脚本实现日志切割
[root@web01 scripts]# vim cut_log.sh
  #!/bin/bash

data_info=$(date +%F-%H:%M)

变量定义为时间

mv /application/nginx/logs/www_access.log /application/nginx/logs/access.log.$data_info

改变日志名称后面加上时间
  /application/nginx/sbin/nginx -s reload

然后平滑重启Nginx 重新生成日志

# cut nginx log cron  写入定时任务
  * */6 * * * /bin/sh /server/scripts/cut_log.sh &>/dev/null

10 Nginx服务location区块说明
利用location区块可以用于定位或者匹配网站资源信息
企业需求解决
搭建好一台nginx的web服务器。配置好内网卡地址与外网卡地址
web服务的网站域名为www.etiantian.org,站点目录为html/www
要求内网用户可以访问网站http://www.etiantian.org/AV资源信息
要求外网用户禁止访问网站http://www.etiantian.org/AV资源信息

①. 如何利用nginx进行访问控制
  rsync有黑白名单-- deny拒绝      --allow允许

nginx同样也用
ngx_http_access_module --- 实现访问控制模块
官方链接:nginx.org/en/docs/http/ngx_http_access_module.html

格式:
location / {
      deny 192.168.1.1;
      allow 192.168.1.0/24;
      allow 10.1.1.0/16;
      allow 2001:0db8::/32;
      deny all;
}

②. 如何定位站点目录资源信息
location区块进行定位站点目录下资源信息
Syntax:     location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:    —
Context:   server, location
官方链接:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

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

允许allow 172.168.1.0/24

拒绝deny 10.0.0.0/24
   server {
        listen 80;
        server_name www.etiantian.org;
           root html/www;
           index index.html index.htm;
   location /AV {
          allow 172.16.1.0/24;
          deny 10.0.0.0/24;
      }
   }

第二个里程:创建测试访问资源

进入站点目录

# cd /application/nginx/html/www
mkdir AV
echo "AV info" >AV/oldboy.html
cat AV/oldboy.html
AV info
第三个里程:重启nginx服务
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx -s reload

location [ = | ~ | ~* | ^~ ] uri { ... }
   = --- 精确匹配网站uri资源信息
   ~ --- 区分大小写匹配网站uri资源信息
   ~* --- 不区分大小写匹配网站uri资源信息
   ^~ --- 优先匹配网站uri资源信息
   /AV/ --- 指定匹配网站资源目录信息
   / --- 默认匹配网站资源信息
   ! --- 对匹配的内容进行取反
样例:
location = / {
[ configuration A ] --- 优先级最高 ①
}

location / { --- 所有匹配都不满足时候,匹配默认location ④
[ configuration B ]
}

location /documents/ { --- 根据资源目录进行匹配 ③
[ configuration C ]
}

location ^~ /images/ { --- 优先匹配 ②
[ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ { --- 不区分大小写匹配网站资源 ③
[ configuration E ]
}

10 Nginx服务rewrite模块功能说明
01. 实现域名地址信息跳转
02. 用于做伪静态
www.etiantian.org/oldboy?edu.html ---动态资源
www.etiantian.org/oldboy-edu.html ---伪静态

实现类似百度重写域名的功能?
baidu.com ===> www.baidu.com
etiantian.org ===> www.etiantian.org

rewrite
Syntax:   rewrite regex replacement [flag];  把什么用正则匹配替换成什么。[  ]里面为匹配类型 
Default:   —
Context: server, location, if

跳转类型4种
last             匹配上了如果还有将继续跳转下去
    stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI;
break         匹配上了还有其他的跳转将终止跳转
    stops processing the current set of ngx_http_rewrite_module directives as with the break directive;
redirect      临时跳转
    returns a temporary redirect with the 302 code; used if a replacement string does not start with “http://”, “https://”, or “$scheme”;
permanent 永久跳转
    returns a permanent redirect with the 301 code.

 以下有个错误

server {
   listen 80;
   server_name www.etiantian.org;
      root html/bbs;
      index index.html index.htm;
   rewrite ^/(.*) http//www.etiantian.org/$1 permanent;

#rewrite 匹配^从开头到 / 结尾,/ 后面(.*)任意字符 www.etiantian.org/$1

$1引用前面( )里的内容 ,permanent永久跳转类型

}

重启/application/nginx/sbin/nginx -s reload

配好eitiantian.org解析 vim /etc/hosts

测试

rewrite指令实践操作一:(错误)
[root@web01 extra]# cat bbs.conf
server {
listen 80;
server_name www.etiantian.org;
rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
root html/www;
index index.html index.htm;
}

错误详情:

    server_name www.etiantian.org; 当匹配到正确的地址时不管前面URL是什么会忽略掉,继续匹配

[root@web01 extra]# curl -L etiantian.org
curl: (47) Maximum (50) redirects followed
[root@web01 extra]# curl -Lv etiantian.org --- 显示无限循环过程
说明:以上配置进入了无限循环状态

rewrite指令实践操作二:(正确)

server {
    listen 80;
    server_name etiantian.org;
    root html/www;
    index index.html index.htm;
    rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
}
server {
    listen 80;
    server_name www.etiantian.org;
    root html/www;
    index index.html index.htm;
}

cat bbs.conf
server {
listen 80;
server_name etiantian.org;
rewrite ^/(.*) http://bbs.etiantian.org/$1 permanent;
}
server {
listen 80;
server_name bbs.etiantian.org bbs.org;
root html/bbs;
index index.html index.htm;
}

rewrite指令实践操作三:(正确)
[root@web01 extra]# cat bbs.conf
server {
listen 80;
server_name bbs.etiantian.org bbs.org;
if ($host ~* "^etiantian.org$") {
rewrite ^/(.*) http://bbs.etiantian.org/$1 permanent;
}
root html/bbs;
index index.html index.htm;
}

八.nginx网站服务实践应用的更多相关文章

  1. 部署Nginx网站服务实现访问状态统计以及访问控制功能

    原文:https://blog.51cto.com/11134648/2130987 Nginx专为性能优化而开发,最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力,单个物 ...

  2. Nginx网站服务

    1.常见的网站服务 静态网站服务: Apache服务 nginx服务 动态网站服务: Tomcat服务 PHP 2.nginx网站服务特点 (1)nginx具有高并发(特别是静态资源).占用系统资源少 ...

  3. Nginx网站服务 配置

    Nginx网站服务 配置 1.编译安装Nginx服务 2.认识Nginx服务的主配置文件nginx.conf 3.访问状态统计配置 4.基于授权的访问控制 5.基于客户端的访问控制 6.基于域名的Ng ...

  4. 部署Nginx网站服务

    编译安装Nginx nginx 官方 : http://nginx.org/ yum -y install pcre-devel zlib-devel   ##安装相关依赖包 ./configure ...

  5. Nginx静态服务,域名解析

    安装这里就不写了在LNMP里有具体的安装 1.1 常用来提供静态Web服务的软件有如下三种:     Apache:这是中小型Web服务的主流,Web服务器中的老大哥.     Nginx:大型网 ...

  6. Nginx网站部署

    Nginx网站服务部署 常用的网站服务软件 处理静态资源的服务: apache软件:https://apache.org/ nginx软件:https://nginx.org/ 处理动态资源的服务: ...

  7. Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)

    四,Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog,sns产品,这几个产品都有一个共同特点,就 ...

  8. Nginx负载均衡实践之一:基本实现

    由于现在的网站架构越来越大,基于互联网的用户也是日渐增长,所以传统的单机版服务器已经渐渐不能适应时代发展的需要.最近在和其他企业接触的过程中,发现对于互联网的经验尤为看重,所谓的互联网经验,其实就是指 ...

  9. 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务

    昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Ngi ...

随机推荐

  1. (hdu) 4857 逃生 (拓扑排序+优先队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄 ...

  2. PS制作科幻特效的金色立体文字

    最终效果 一.Photoshop打开背景素材. 二.然后我们来制作字效,首先当然是在画布上打上字了,在这里要注意的是尽量选一些艺术字体,这样做出来的效果比较好些,我这里用到的字体为“Matura MT ...

  3. python 必学模块collections

    包含的主要功能如下 查看collections 的源码我们可以看到其为我们封装了以下的数据结果供我们调用 __all__ = ['deque', 'defaultdict', 'namedtuple' ...

  4. Python——Pycharm打包exe文件

    一.安装pyinstraller    pip install  PyInstaller 二.打包程序   pyinstaller.py -F -w -i tubiao.ico 文件名.py -F 表 ...

  5. [模板] 次短路 | bzoj1726-[Usaco2006Nov]Roadblocks第二短路

    简介 所谓次短路, 顾名思义, 就是第二短路. :P 1到n的次短路长度必然产生于:1到x的最短路 + edge(x,y) + y到n的最短路 简单证明一下: 设 \(dis(i,j)\) 表示 \( ...

  6. Android : Resource is not a Drawable (color or path)

    错误1:android.content.res.Resources$NotFoundException 错误2:Resource is not a Drawable (color or path) 解 ...

  7. Django ORM 操作2 增删改

    增删改 增加 表对象直接增加方式 Frank_obj = models.Student(name ="海东",course="python",birth=&qu ...

  8. Magento2自定义命令

    命令命名准则 命名指南概述 Magento 2引入了一个新的命令行界面(CLI),使组件开发人员能够插入模块提供的命令. Command name Command name 在命令中,它紧跟在命令的名 ...

  9. css 溢出overflow

    css 溢出overflow 当一个元素被设置为固定大小,在这个元素中的内容如果超出元素的界限,就会出现溢出的现象. 通常情况下我们可以通过overflow来控制这个属性. overflow语法定义 ...

  10. 再也不用c++的string了

    今天打比赛,觉得写法没错,但死活过不了大样例.调试时发现用cin读入一行臭长臭长的string类型变量时出锅了,原来几千个字符就读进来500个,导致一直WAWAWAWAWA. 最后yyj神犇帮我就删掉 ...