Linux(7)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡
一、Nginx.conf主配置文件
Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。
核心模块:
user www; # Nginx进程所使用的用户
worker_processes ; # 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
server_name localhost; # 提供服务的域名或主机名
access_log host.access.log # 访问日志
# 控制网站访问路径
'location' / {
root /usr/share/nginx/html; # 存放网站代码路径
index index.html index.htm; # 服务器返回的默认页面文件
}
# 指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page /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 ;
server_name www.s15rihan.com;
location / {
root /opt/myserver/rihan; # 定义虚拟主机的网页根目录
index index.html;
}
}
[root@localhost nginx112]# ./sbin/nginx -t 检测是否有语法错误
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>
[root@localhost opt]# vi /opt/myserver/rihan/index.html 编辑文件,内容如下
<h1>welcome to www.s15rihan.com!</h1>
3)启动nginx
[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 对应[/Aug/::: +]
$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
实时检测日志命令如下,效果如下图:
[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 /.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 ;
# 当我的请求来自于 192.168..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=;
server 192.168.13.24 weight=;
}
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)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡的更多相关文章
- 使用Nginx实现服务器反向代理和负载均衡
前言 同事总问我Nginx做反向代理负载均衡的问题,因此特意留下一篇扫盲贴! 直接部署服务器的风险 假设,我开发了一个网站,然后买了一台Web服务器和一台数据库服务器,直接部署到公共网络上.如下图,网 ...
- nginx主配置文件学习,以及nginx的反向代理和负载均衡
1.nginx.conf主配置文件学习 worker_processes : 表示nginx的进程数,根据CPU的核数来定义,起到优化的作用.通过cat /proc/cpuinfo来查看核数 even ...
- nginx之安装、多虚拟主机、反向代理和负载均衡
一.web服务器与web框架 1.web服务器简介 Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的Web服务器会通过 HTTP(超文 ...
- Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践
1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- Linux 笔记 - 第二十章 配置 Nginx 反向代理和负载均衡
一.简介 由于 Nginx 的反向代理和负载均衡功能经常被提及,所以将这两个功能单独提出来进行讲解. Nginx 其实仅仅是作为 Nginx Proxy 反向代理使用的,因为这个反向代理功能表现的效果 ...
- nginx配置虚拟主机、反向代理和负载均衡
为了实现这个功能,需要修改nginx的配置文件,将nginx.conf清理一下,使结构更清晰. worker_processes ; events { worker_connections ; } h ...
- Linux服务之nginx服务篇三(反向代理、负载均衡)
一.Nginx实现反向代理 概念 反向代理:在收到客户端请求之后,会修目标IP地址和端口 正向代理:在收到客户端请求之后,会修源IP地址和端口 上游服务器:代理服务器后端的哪些真正给客户端提供服务的节 ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
随机推荐
- 理解、学习与使用Java中的Optional
从Java8 引入的一个很有趣的特性是Optional类.Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异 ...
- lua 打印 table 拷贝table
-- 打印table function print_lua_table (lua_table, indent) if lua_table == nil or type(lua_table) ~= &q ...
- layui的时间线当点击按钮的时候自动添加一条新时间线
$('.littleTaskBtn li').on('click',function(){ var content=$('.content').html(); $('.layui-timeline-i ...
- C/C++之文件打开方式差别
一.引言 在上一篇中,需要获取文件的大小,但是获取的文件大小与从文件中读取的数据大小总是对不上(10行数据,文件大小是129,但是读取数据是119),因此,实现的服务器总是出现这个错误:net::ER ...
- O(1)取Queue中的最大值
实现原理: 1.利用Stack的先进后出的特性,实现一个MaxStack,MaxStack中用一个Stack记录当前的值,一个Stack记录当前的最大值. 2.用2个MaxStack实现MaxQueu ...
- linux学习笔记命令篇1---命令ls
前言: linux中接触最多的就是命令和文件. 命令 命令是有其格式的, 一般格式是command [option] parameter1 parameter2 [paramete3 ...]: 注 ...
- scrapy-redis源代码分析
原创文章,链接:http://blog.csdn.net/u012150179/article/details/38226253 + (I) connection.py 负责依据setting ...
- 怎样用Google APIs和Google的应用系统进行集成(5)----怎样把Google Tasks的JSON Schema转换成XML的Schema(XSD)?
前面说了一些Google API的介绍,可是在实际的开发其中,我们可能须要把Google RESTful API返回的JSON数据转换成XML数据输入到第三方系统,这在企业应用集成里面很的常见. 那么 ...
- 在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL语句、java等层面的解决方案。
在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计.SQL语句.java等层面的解决方案. 解答: 1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 whe ...
- 在项目中用过Spring的哪些方面?及用过哪些Ajax框架?
在项目中用过Spring的哪些方面?及用过哪些Ajax框架? 解答:在项目使用过Spring IOC ,AOP,DAO,ORM,还有上下文环境. 在项目使用过Ext,Juery等Ajax框架.