我们平时访问的网络网站就是WEB网络服务,允许用户通过浏览器访问互联网中的各种资源服务

WEB服务器会通过HTTP或者HTTPS的方式将请求内容传递给客户端

目前常见的WEB服务有IIS, Nginx和Apache等

WEB服务器和WEB框架的区别

WEB服务器:接收HTTP请求并返回数据
WEB框架:开发WEB应用程序,处理接收到的HTTP请求

Nginx特点:

  • 开源免费

  • 高性能,高并发

    • 支持几万并发连接

    • 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M

  • 安装灵活,使用方便

  • 功能丰富

    • 反向代理

    • 负载均衡

    • 缓存服务

    • 访问日志

1.安装

nginx   官方nginx
tenginx 淘宝nginx 这2个一模一样,我这里采用后者,并且采用源代码安装
  • 下载源代码

    wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

  • 解压缩
    tar -zxvf tengine-2.3.2.tar.gz
  • 指定安装目录,检查编译环境
    先更新本地依赖页
    sudo apt-get update
    sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev libperl-dev libtool
    sudo apt-get install openssl
    ./configure --prefix=/opt/tng232
  • make进行编译
    sudo make
  • 生成可执行文件
    sudo make install
  • 配置环境变量
    sudo vim /etc/profile
    
    PATH="/opt/python390/bin/:/opt/tng232/sbin:/home/parallels/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
    
    source /etc/profile

2.常用命令

  • 第一次启动

    nginx -c /../nginx.conf  # 指定启动的配置文件,不指定nginx会自动加载默认路径的配置文件
  • 平滑启动

    sudo nginx -s reload -c /opt/tng232/conf/nginx.conf # 平滑启动,重新读取nginx配置文件,不重启nginx进程
  • 停止进程

    nginx -s stop  -c /opt/tng232/conf/nginx.conf # 停止nginx进程
  • 检查Nginx配置文件语法

    nginx -t -c /opt/tng232/conf/nginx.conf

启动后可以访问

http://10.211.55.5:80

 

3.学习配置文件

配置文件在nginx安装的conf目录

nginx的配置文件是C语言风格的, 以 ;结束每一行的配置
配置文件是以代码块的形式编写的
主要有以下几个模块 http{} # 里面定义了多个代码块,是nginx的核心配置点
server{} # 虚拟主机代码块,定义了监听端口等
location{} # 域名匹配代码块
#user  nobody;
# 定义nginx的工作进程数 以CPU核数为准
worker_processes 5;
# 以下是日志功能
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G"; # 将pid写入文件中
pid logs/nginx.pid; events {
# 每个worker进程支持的最大连接数
worker_connections 1024;
} # 配置文件的核心区域
http {
include mime.types;
default_type application/octet-stream;
# 打开nginx的访问日志功能
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 "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; # 打开此功能,能够极大的提升网站访问,以及静态资源压缩
gzip on; # 虚拟主机的核心配置
server1 {
listen 80;
server_name localhost; # nginx编码支持
charset utf-8
#charset koi8-r; #access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; # nginx的域名匹配,所有的请求,都会进入到这里
location / {
# 定义该虚拟主机资料存放路径,可以自由修改
root html;
# 定义nginx首页文件名字,需要在root指定的目录下
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 可以定义第二个虚拟主机的配置
server2 {
listen 90;
server_name localhost; # nginx编码支持
charset utf-8 # nginx的域名匹配,所有的请求,都会进入到这里
location / {
# 定义该虚拟主机资料存放路径,可以自由修改
root html;
# 定义nginx首页文件名字,需要在root指定的目录下
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

4.nginx多站点功能

nginx的web站点也称为nginx的虚拟主机站点,通过文件目录的不同,定义多个不同的网站

多虚拟主机的实现方式

  • 基于域名的多虚拟主机

    修改hosts文件,强制写入域名对应关系,比较麻烦
  • 基于端口的虚拟主机

    修改nginx.conf的端口配置,定义两个server与区块,如下
     # 目前这里是第一个server {} 区域块,端口是85
    server {
    # 定义该网站的端口
    listen 85;
    server_name localhost;
    charset utf-8;
    location / {
    root /python/;
    index index.html index.htm;
    }
    } # 目前这里是第二个server {} 区域块,端口是85
    server {
    # 定义该网站的端口
    listen 89;
    server_name localhost;
    charset utf-8;
    location / {
    root /linux/;
    index index.html index.htm;
    }
    }
  • 基于IP的虚拟主机
    通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定

5.nginx日志

日志作用

nginx的方可日志,能够记录,分析用户的请求行为
-什么时间点,访问的最频繁,比如某网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术
-记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。

操作

改nginx.conf  在 http{}代码块中,打开如下注释即可

    #打开此nginx的访问日志功能,即可查看日志
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; 日志变量解释
$remote_addr 记录客户端ip
$remote_user 远程用户,没有就是 “-”
$time_local    对应[14/Aug/2018:18:46:52 +0800]
$request     对应请求信息"GET /favicon.ico HTTP/1.1"
$status     状态码
$body_bytes_sent  571字节 请求体的大小
$http_referer  对应“-”  由于是直接输入浏览器就是 -
$http_user_agent  客户端身份信息,以此可以nginx判断,用户客户端是手机浏览器,就转发移动端页面给与用户
如果是pc的客户端,就转发给pc页面给与用查看

6.反向代理

正向代理,代理的是客户端

反向代理,代理的是服务端

nginx反向代理的操作:

第一个server{}标签,用于反向代理的作用,修改nginx.conf如下

    #   第一个虚拟主机的配置,作用是反向代理了
server {
listen 80;
server_name localhost;
charset utf-8;
error_page 404 /40x.html;
# 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
location / {
proxy_pass http://192.168.178.140:90;
} }

第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能

#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server {
listen 90;
server_name _;
location / {
root /s25proxy/;
index index.html;
}
}

7.负载均衡

负载均衡就是将请求均衡的分给不通的web服务端

负载均衡的搭建

第一个虚拟主机server{}的作用,是反向代理,80端口

    # 用upstream关键词定义负载均衡池,写入资源服务器的地址
# 负载均衡的算法,默认是轮询机制,一台服务器处理一次
upstream s25real_server {
server 192.168.178.140:90;
server 192.168.178.140:95;
}
server {
listen 80;
server_name localhost;
charset utf-8;
error_page 404 /40x.html;
location / {
proxy_pass http://s25real_server;
} }

第二个server{}标签的配置,作用是提供资源给用户看的,90端口

#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server {
listen 90;
server_name _;
location / {
root /s25lol/;
index index.html;
}
}

第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口

#第三个server{}虚拟主机,作用是 提供资源服务器的内容的
server {
listen 95;
server_name _;
location / {
root /s25dnf/;
index index.html; }
}

nginx负载均衡算法

- 轮询机制:默认的,每台服务器各一次

- 加权轮训机制

    upstream  s25real_server  {
server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}

8.搭建文件服务器

server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; location / {
root /opt/tng232/download;
autoindex on; # 索引,开启目录文件列表
autoindex_exact_size on; # 显示文件大小
autoindex_localtime on; # 显示文件时间
}
}

1.nginx学习的更多相关文章

  1. Nginx学习回顾总结 部分:

    21:46 2015/11/9Nginx学习回顾总结进程间通信,近似于socket通信的的东西:才发现这种通信并不是很难,并不是我想象的那样很多内容,新领域,入门只是几个函数的使用而已.以前猜过是这样 ...

  2. Nginx学习笔记4 源码分析

    Nginx学习笔记(四) 源码分析 源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_ ...

  3. Nginx学习笔记~目录索引

    回到占占推荐博客索引 前几天整理了<Docker的学习笔记索引>,受到了很多朋友的关注,今天把Nginx的文章也整理一下,以后将永久更新,像大叔之前的<EF文章系列>,< ...

  4. Nginx学习系列二Linux下Nginx实现负载均衡

    关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1.启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限 ...

  5. Nginx系列0:Nginx学习历程

    Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...

  6. nginx 学习资料

    nginx 学习资料 table th:first-of-type { width: 90px; } table th:nth-of-type(2) { } table th:nth-of-type( ...

  7. Nginx学习总结

    2017年2月23日, 星期四 Nginx学习总结 Nginx是目前比较主流的HTTP反向代理服务器(其企业版提供了基于TCP层的反向代理插件),对于构建大型分布式web应用,具有举足轻重的作用.简单 ...

  8. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

  9. Nginx学习---Nginx的详解_【all】

    1.1. Nginx简介 1.什么是nginx nginx:静态的,开源的www软件,可以解析静态的小文件(低于1M ),支持高并发占用较发少的资源(3W并发,10个进程,内存150M),跨平台 te ...

  10. Nginx学习之从零搭建静态资源网站

    前言   在某学习网站学习了nginx的安装和使用,以此文记录. 环境准备   安装在VMWare下的Centos虚拟机.由于我这是新装的虚拟机.所以很多插件都没有,这里干脆一次性安装上. wget ...

随机推荐

  1. Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  2. Qt 场景创建

    1 创建  Q t Widget Application 2 创建窗口 3 创建后的目录  创建完成后运行一下 4 导入资源  将res文件拷贝到 项目工程目录下 添加资源 选择一模版.Qt-Reso ...

  3. docker容器数据卷的使用

    什么是容器数据卷 docker的理念回顾 将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求,是希望能够持久化的! 就好比,你安装一个MySQL,结果你把容器删了,就相当于 ...

  4. 2021年3月-第02阶段-前端基础-Flex 伸缩布局-移动WEB开发_flex布局

    移动web开发--flex布局 1.0 传统布局和flex布局对比 1.1 传统布局 兼容性好 布局繁琐 局限性,不能再移动端很好的布局 1.2 flex布局 操作方便,布局极其简单,移动端使用比较广 ...

  5. KMP&Z函数详解

    KMP 一些简单的定义: 真前缀:不是整个字符串的前缀 真后缀:不是整个字符串的后缀 当然不可能这么简单的,来个重要的定义 前缀函数: 给定一个长度为\(n\)的字符串\(s\),其 \(前缀函数\) ...

  6. Redis基本数据结构ZipList

    为什么要有ziplist 有两点原因: 普通的双向链表,会有两个指针,在存储数据很小的情况下,我们存储的实际数据的大小可能还没有指针占用的内存大,是不是有点得不偿失?而且Redis是基于内存的,而且是 ...

  7. 管理数据库的神器:DBeaver

    转载自:https://mp.weixin.qq.com/s/oqEAZNk-TorqRUocav27Ew GitHub地址:https://github.com/dbeaver/dbeaver 软件 ...

  8. Kibana控制台(Dev Tools) Console

    控制台插件提供一个用户界面来和 Elasticsearch 的 REST API 交互.控制台有两个主要部分: editor ,用来编写提交给 Elasticsearch 的请求: response ...

  9. overflow 隐藏滚动条样式

    在使用overflow,属性值为auto或者scroll时,很多时候会有多余的滚动条在旁边,这时就非常影响观瞻,所以我们有时需要将滚动条隐藏掉. 今天就说两种我用到的隐藏滚动条的方法,如果有其他解决方 ...

  10. Go设计模式学习准备——下载bilibili合集视频

    需求 前段时间面试,被问到设计模式.说实话虽然了解面向对象.多态,但突然被问到设计模式,还要说清解决什么问题,自己是有些懵的,毕竟实习主要工作是在原项目基础进行CRUD,自己还是没有深度思考,所以只能 ...