一、Nginx.conf主配置文件

  Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。

核心模块:
  user www; # Nginx进程所使用的用户
  worker_processes 1; # Nginx运行的work进程数量(建议与CPU数量一致或auto)
  error_log /log/nginx/error.log # Nginx错误日志存放路径
  pid /var/run/nginx.pid # Nginx服务运行后产生的pid进程号
 事件模块:
  events {
   worker_connections # 每个worker进程支持的最大连接数
   use epool; # 事件驱动模型, epoll默认
  }
http内核模块,公共的配置定义在http{}:
  http {
  ...
  # 使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
  'server' {
  listen 80; # 监听端口, 默认80
  server_name localhost; # 提供服务的域名或主机名
  access_log host.access.log # 访问日志
  # 控制网站访问路径
  'location' / {
  root /usr/share/nginx/html; # 存放网站代码路径
  index index.html index.htm; # 服务器返回的默认页面文件
   }
  # 指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
  error_page 500 502 503 504 /50x.html;
   }
  ...
  # 第二个虚拟主机配置
  'server' {
  ...
  }
     # 包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
  include /etc/nginx/conf.d/*.conf;   } # http层结束

  有关Nginx配置文件nginx.conf更详尽的解释参见博客:https://www.cnblogs.com/pyyu/p/9468680.html

二、Nginx虚拟主机

  虚拟主机就是web服务里的一个独立的网站站点,这个站点对应独立的域名(IP),具有独立的程序和资源目录,可以独立的对外提供服务。这个独立的站点配置是在nginx.conf中使用server{}代码块标签来表示一个虚拟主机。

  如果每台linux服务器只运行了一个小网站,那么人气低,流量小的草根站长需要承担高额的服务器租赁费,也造成了硬件资源浪费。虚拟主机就是将一台服务器分割成多个“虚拟服务器”,每个站点使用各自的硬盘空间,由于省资源,省钱,众多网站都使用虚拟主机来部署网站。

  Nginx支持多个server{}标签,即支持多个虚拟主机站点。

虚拟主机类型:
  - 基于域名的虚拟主机:通过不同的域名区分不同的虚拟主机,是企业应用最广的虚拟主机。
  - 基于端口的虚拟主机:就是通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要为公司内部的网站,例如:一些不希望直接对外提供用户访问的网站后台等,访问基于端口的虚拟主机地址里要带有端口,例如:http://www.baidu.com:80;
  - 基于IP的虚拟主机:通过不同的IP区分不同的虚拟主机,此类比较少见,一般不同业务需要使用多IP的场景都会在负载均衡器上进行VIP绑定;

1、基于域名的虚拟主机演示

  nginx可以自动识别用户请求的域名,根据不同的域名请求服务器传输不同的内容,只需要保证服务器上有一个可用的ip地址,配置好dns解析服务(etc/hosts是linux系统中本地dns解析的配置文件)。

  下面我们演示使用windows系统的浏览器去访问虚拟机(ip为192.168.13.129)中的ngnix服务器,因此需要配置windows中的dns解析文件hosts(路径一般为C:\Windows\System32\drivers\etc\hosts),hosts文件中写入如下两行内容:

  192.168.13.129 www.s15oumei.com
  192.168.13.129 www.s15rihan.com

  1)修改nginx配置文件nginx.conf

    文件中的server{}内修改如下几个参数:

server{
  ......
  server_name www.s15oumei.com;
  location / {
  root /opt/myserver/oumei;
  index index.html;
   }
  }

  文件中的server{}后再写一个server{},即写入一个新的虚拟主机,内容如下:

server{
  listen 80;
  server_name www.s15rihan.com;
  location / {
  root /opt/myserver/rihan; # 定义虚拟主机的网页根目录
  index index.html;
  }
  }
1
[root@localhost nginx112]# ./sbin/nginx -t                   检测是否有语法错误

  2)准备两个虚拟主机的网页根目录内容

1
2
[root@localhost opt]# mkdir -p myserver {oumei,rihan}
[root@localhost opt]# vi /opt/myserver/oumei/index.html     编辑文件,内容如下

    <h1>welcome to www.s15oumei.com!</h1>

1
[root@localhost opt]# vi /opt/myserver/rihan/index.html     编辑文件,内容如下

    <h1>welcome to www.s15rihan.com!</h1>

  3)启动nginx

1
[root@localhost nginx112]# ./sbin/nginx

  4)使用浏览器分别访问www.s15oumei.com和www.s15rihan.com,效果如下

三、Nginx访问日志

  日志功能对每个用户访问网站的日志信息记录到指定的日志文件里,开发运维人员可以分析用户的浏览器行为,此功能由ngx_http_log_module模块负责,官网地址是:http://nginx.org/en/docs/http/ngx_http_log_module.html

  配置文件nginx.conf中关于控制日志的参数如下:

  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   客户端身份信息
  $http_x_forwarded_for  记录客户端的来源真实ip 97.64.34.118

  实时检测日志命令如下,效果如下图:

1
[root@localhost nginx112]# tail -f logs/access.log

四、Nginx限制网站来源IP访问

  如果哪天发现你的nginx很慢,或者检查access.log时候,有一个some body疯狂请求你的nginx server,那么可以禁止这个IP访问,配置文件nginx.conf中参数如下:

location / {
# 拒绝参数是 deny,后边写你想拒绝的IP地址或者IP段,deny还支持拒绝一整个网站
deny 192.168.13.125;
root /opt/myserver/rihan;
index index.html;
}

五、Nginx错误页面优化

  在网站运行过程中,可能因为页面不存在等原因,导致网站无法正常响应请求,此时web服务会返回系统的错误码,但是默认的错误页面很不友好。

  因此我们可以将404,403等页面的错误信息重定向到网站首页或者其他指定的页面,提升用户访问体验。在nginx.conf中配置错误页面如下:

 server{
    ......
    location / {
      ......
    }
    error_page 404 /404.html; # 这个404.html存在虚拟主机定义的网页根目录下
    ......
  }

  然后写一个漂亮的404.html页面即可。

六、Nginx代理

  代理的概念在生活中很常见,比如租房中介,找黄牛买票等等。

1、正向代理

  正向代理,也就是平常所说的代理,他的工作原理就像一个跳板(VPN),简单的说:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。

2、反向代理

  对于客户端而言,代理服务器就像是原始服务器,它可以保护和隐藏原始资源服务器,如下图:

  正向代理与方向代理对比图:

3、实现一个简单的反向代理

  准备两台服务器,都安装好nginx软件,如下:

    原始资源服务器(可理解为火车票售票点) ---   192.168.13.79  

    反向代理服务器(可理解为黄牛)         ---   192.168.13.24  

  反向代理服务器的配置文件nginx.conf中location参数如下:

  server{
    ......
    location / {
      proxy_pass http://192.168.13.79;
      # root html;
      # index index.html;
    }
    ......
  }

  配置完成后,启动两个服务器,用户浏览器(所在windows的IP是192.168.13.56)访问代理服务器地址192.168.13.24时,代理服务器会向原始服务器发送请求,然后将原始服务器返回的资源返回给浏览器。

  代理服务器的日志监测结果如下图:

  原始资源服务器的日志监测结果如下图:

七、Nginx负载均衡

1、集群的概念

  简单的说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。这些服务器之间可以彼此通信,协同向用户提供应用程序、系统资源数据,并以单一系统的模式加以管理。当用户客户机请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器。

  打开谷歌、百度的页面,看起来很简单,也许你觉得用几分钟就可以制作出相似的网页,而实际上,这个页面的背后是由成千上万台服务器集群协同工作的结果。而这么多服务器维护和管理,以及相互协调工作也许就是你未来的工作职责了。

  若要用一句话描述集群,即一堆服务器合作做一件事,这些机器可能需要整个技术团队架构、设计和统一协调管理,这些机器可以分布在一个机房,页可以分布在全国各个地区的多个机房。

  为什么要用集群?想了解为什么要使用集群,就要从集群的特点讲起:

    - 高性能(Performance)

    - 价格有效性(Cost-effectiveness)

    - 可伸缩性(Scalability)

    - 高可用性(Availability)

    - 透明性(Transparency)

2、负载均衡

3、nginx负载均衡实验

  Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾。

  Nginx要实现负载均衡需要用到proxy_pass代理模块配置。

  Nginx负载均衡与Nginx代理不同地方在于,Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

  1)准备三台机器,都安装上nginx

    机器1    192.168.13.121   作为nginx负载均衡器

    机器2     192.168.13.24   web服务,提供一个页面

    机器3 192.168.13.79    web服务,提供一个页面

  2)配置机器2和机器3的,分别为其写一个页面index.html,内容如下:

    <h1>我是192.168.13.24机器上的页面!</h1>      # 机器2页面

    <h1>我是192.168.13.79机器上的页面!</h1>      # 机器3页面

    配置完成后启动两台机器的nginx服务。

  3)修改机器1(负载均衡器)的配置文件nginx.conf,写入内容如下:

# 定义一个负载均衡池
  upstream s15webserver {
    server 192.168.13.79 ;
    server 192.168.13.24 ;
  }   # 在虚拟主机中添加反向代理配置,将用户的请求,直接转发给负载均衡池中的服务器
  server {
   listen 80;
   # 当我的请求来自于 192.168.13.121时,走这个虚拟主机
   server_name 192.168.13.121;
   ......
   location / {
   proxy_pass http://s15webserver; # 核心配置就在这,一条proxy_psss参数即可
   # root html;
   # index index.html index.htm;
   }
  }

    配置完成后启动负载均衡器的nginx服务。

  4)此时在客户端windows的浏览器测试访问负载均衡器(192.168.13.121),多访问几次,查看请求的分发结果。

4、nginx负载均衡调度算法

  上面我们使用的默认的轮询算法,负载均衡调度算法有如下几种:

调度算法           概述
  轮询      按时间顺序逐一分配到不同的后端服务器(默认)
  weight    加权轮询,weight值越大,分配到的访问几率越高
  ip_hash    每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
  url_hash   按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
  least_conn 最少链接数,那个机器链接数少就分发

  1)weight权重配置方法

  # 定义一个负载均衡池
  upstream s15webserver {
    server 192.168.13.79 weight=10;
    server 192.168.13.24 weight=1;
  }

  2)ip_hash配置,不能和weight一起使用,配置如下

  # 定义一个负载均衡池
  upstream s15webserver {
    ip_hash;
    server 192.168.13.79 ;
    server 192.168.13.24 ;
  }

八、其他

  在linux中,当编辑一个文件(如s15.txt)时,若非正常退出时,会产生一个临时文件(.s15.txt.swp),此时再次编辑s15.txt文件时,会先进入一个提示页面,根据提示操作即可,若不想有提示页面直接编辑,则把临时文件删除即可。

Linux--7的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  10. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

随机推荐

  1. javascript获取窗口位置、绝对位置、事件位置等

    有段时间没更新博客了,工作实在太忙了,加班加班再加班就是我们这个行业的常态吧...还好最近把工作进度完成了,终于有些空余时间了.关于<Javascript高级程序设计>系列,我并没有弃坑, ...

  2. Codechef Union on Tree

    Codechef Union on Tree https://www.codechef.com/problems/BTREE 简要题意: 给你一棵树,\(Q\)次询问,每次给出一个点集和每个点的\(r ...

  3. JS性能之setTimeout与clearTimeout

    测试环境: chrome浏览器 结论: 1 一个页面用setTimeout越多,该页面消耗的内存就会越多,几乎成正比. 2 在'startCount(1000000);-->100万'情况下,不 ...

  4. bzoj 1927 星际竞速 —— 最小费用最大流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1927 首先注意到这是个DAG: 考虑每个点从哪里来,可以是瞬移来的,也可以是从某个点走过来的 ...

  5. WCF中WcfSvcHost.exe如何禁止自动启动

    今天同事问在一个WCF server的解决方案里调试时如何禁止Server自动启动. 经过调查发现, VS的工具WcfSvcHost会在调试时自动扫描工程里的WCF server, 然后启动起来. 如 ...

  6. js---复选框(全选,不选,反选)demo1--

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. node包管理工具nvm

    去NVM官网下载NVM压缩包,下载nvm-setup.zip,直接傻瓜式安装 安装成功后运行命令: nvm -v 常用命令: nvm install <version> ## 安装指定版本 ...

  8. python操作sql server2008 pyodbc

    使用Python通过PyODBC连接数据的注意事项 今天使者用PyODBC连接数据库,试了很久才出来,现把一些心得体会和大家分享! 一.PyODBC的下载地址: http://code.google. ...

  9. linux命令-xz压缩

    xz gzip bzip2使用方法基本一样 压缩文件 [root@wangshaojun ~]# xz 111.txt[root@wangshaojun ~]# ls  //////111.txt文件 ...

  10. Angular11 模板表单、响应式表单(自定义验证器)、HTTP、表单元素双向绑定

    1 模板表单 模型通过指令隐式创建 技巧01:需要在模块级别引入 FormsModule ,通常在共享模块中引入再导出,然后在需要用到 FormsModule 的模块中导入共享模块就可以啦 impor ...