nginx

nginx介绍

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

正向代理

我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。

反向代理

反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

 nginx安装

[root@localhost var]# yum install epel-release
[root@localhost var]# yum install nginx -y 

Nginx的默认网站目录是

/usr/share/nginx/html

nginx配置文件构成

nginx配置文件默认是在/etc/nginx/nginx.conf

nginx.conf是由多个块组成,最外面的块是main,main包含events和http,http包含upstream和多个server,server又包含多个location

main:全局设置,影响其他所有设置
server:主要用于指定主机和端口
upstream:主要用于负载均衡,设置一系列后端的服务器
location:匹配网页位置
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。

nginx配置文件相关参数

user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
pid是个主模块指令,用来指定进程pid的存储文件位置。
include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度
log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。
sendfile开启高效文件传输模式
tcp_nopush开启防备网络阻塞,减少网络报文段的数量
tcp_nodelay等待多个字节组合成一个数据包,从而提高I/O性能
keepalive_timeout连接超时时间,单位是秒
types_hash_max_size影响散列表的冲突率。types_hash_max_size越大,就会消耗更多的内存,但检索速度就更快。types_hash_max_size越小,消耗的内存就越小,但检索速度可能会变慢
default_type默认的文件类型

负载均衡

在/etc/nginx/nginx.conf配置文件中添加和修改以下内容

upstream 192.168.254.12 {
    server 192.168.254.13:80 weight=1;
    server 192.168.254.14:80 weight=3;
}

location / {
    proxy_pass http://192.168.254.12;
    index index.html index.htm;
}

可跟参数

轮询(默认):    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
Weight:        指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
down:            表示当前的server暂时不参与负载均衡;
backup:        预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;

nginx动静分离

环境:

nginx调度:192.168.254.128
后端server1:192.168.254.129
后端server2:192.168.254.130

192.168.254.128 编辑nginx配置文件,在server中添加如下内容

#静态送给129处理
location ~ .(html|gif|jpg|jpeg)$ {
    proxy_pass http://192.168.254.129;
    index index.html;
}

#动态送给130处理
location ~ .php$ {
    proxy_pass http://192.168.254.130;
    index index.php;
}


#如果静态请求想交给自己处理可以这样修改 location
~*.(html|gif|jpg|jpeg)$ { root /var/www/html; index index.html index.htm; }

验证

 ok,没问题

说明

以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
以^~ 开头,表示uri以某个常规字符串开头,不是正则匹配
以~ 开头,表示区分大小写的正则匹配;
以~* 开头,表示不区分大小写的正则匹配
以/开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到

rewrite用法

以下为例子,只要url后缀带/static都会被跳转到百度这个网站

location /static {
    rewrite ^ https://www.baidu.com;
}
原文地址:https://www.cnblogs.com/fengzi7314/p/11845839.html