Nginx安装及学习笔记

一、Linux下安装nginx
nginx安装包下载:https://nginx.org/en/download.html

在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel(这些都是干什么用的?)

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

(我最开始没有做这步,后面./configure的时候报错 C compiler cc is not found)

# 解压到 ~/nginx
tar -zxvf nginx-1.9.9.tar.gz

# 进入nginx目录
cd nginx-1.9.9

# 生成Makefile文件并指定安装目录 (--help 查看帮助信息 https://nginx.org/en/docs/configure.html)
./configure --prefix=~/nginx

# 编译,安装
make
make install

# 测试是否安装成功
./sbin/nginx -t

#启动nginx
./nginx

#停止nginx
./nginx -s stop (快速关闭)
./nginx -s quit (正常关闭)

#重新加载配置文件
./nginx -s reload

#重新打开日志文件
./nginx -s reopen

启动nginx时报错bind() to 0.0.0.0:80 failed(13: Permission denied) 说明该端口号不可用去nginx.conf修改端口号,这里为8090

启动nginx时报错两个log文件没有权限,发现目录所有者被改成了nobody,原因是我第一次执行nginx -t 操作时用的是root用户,如果执行nginx -t的用户不是nginx目录的所有者,就会强行改变下面临时目录的权限。可通过chown -R 用户组:组名 文件名修改目录所有者。

二、nginx.conf配置文件

...              #全局块
 
events {         #events块
   ...
}
 
http      #http块
{
    ...   #http全局块
    server        #server块
    {
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN]
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。

6、upstream:指令主要用于负载均衡,设置一系列的后端服务器;

三、提供静态内容

server {
    location / {
        root /home/xxx/data/html;
        index 1.html
    }

    location /images/ {
        root /home/xxx/data;
    }
}

如果有多个匹配的location块,nginx将选择前缀最长的块。

四、设置简单的代理服务器

正向代理:客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。
反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
正向代理代理客户端,反向代理代理服务器。

映射到本地系统的/home/xxx/data/html目录

server {
    listen 8080;
    root /home/xxx/data/html;

    location / {
    }
}

通过10.16.161.103:8020端口访问10.16.161.104:8090下nginx的资源

http {
    server {
        listen 8020;
        location / {
            proxy_pass http://10.16.161.104:8090;
        }
        location ~ \.(gif|jpeg|jpg|png)$ {
        	root data/images;
        }
    }
}

五、使用nginx作为http负载均衡器

四层负载均衡:主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以TCP为例,负载均衡设备在接收到第一个来自客户端的请求时,通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。

七层负载均衡,也称为“内容交换”:主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
在这里插入图片描述
1、轮询
根据Nginx配置文件中的顺序,依次把客户端的web请求分发到不同的后端服务器上。

http {
    upstream myapp1 {
        server 10.16.161.104:8090;
        server 10.16.161.103:8090;
        server 10.16.161.102:8090;
    }

    server {
        listen 8020;
        location / {
            proxy_pass http://myapp1;
        }
        location ~ \.(gif|jpeg|jpg|png)$ {
        	root data/images;
        }
    }
}

2、最少连接调度算法
web请求会被转发到连接数最少的服务器上。

http {
    upstream myapp1 {
    	least_conn;
        server 10.16.161.104:8090;
        server 10.16.161.103:8090;
        server 10.16.161.102:8090;
    }

    server {
        listen 8020;
        location / {
            proxy_pass http://myapp1;
        }
        location ~ \.(gif|jpeg|jpg|png)$ {
        	root data/images;
        }
    }
}

3、权重
把请求更多地分发到高配置的后后端服务器上,把相对较少的请求分发到低配服务器。

http {
    upstream myapp1 {
        server 10.16.161.104:8090 weight=2;
        server 10.16.161.103:8090;
        server 10.16.161.102:8090;
    }

    server {
        listen 8020;
        location / {
            proxy_pass http://myapp1;
        }
        location ~ \.(gif|jpeg|jpg|png)$ {
        	root data/images;
        }
    }
}

4、会话持久性
同一客户端连续的web请求都会被分发到同一个服务器进行处理。

http {
    upstream myapp1 {
    	ip_hash;
        server 10.16.161.104:8090;
        server 10.16.161.103:8090;
        server 10.16.161.102:8090;
    }

    server {
        listen 8020;
        location / {
            proxy_pass http://myapp1;
        }
        location ~ \.(gif|jpeg|jpg|png)$ {
        	root data/images;
        }
    }
}

其它指令
keepalive:每个worker进程为发送到upstream服务器的连接所缓存的个数;
server:定义一个upstream服务器的地址,还可包括一系列可选参数,如:
weight:权重;
max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;
fail_timeout:等待请求的目标服务器发送响应的时长;
backup:用于fallback的目的,所有服务均故障时才启动此服务器;
down:手动标记其不再处理任何请求;

六、其他配置说明

  • listen

1、listen *:80 | *:8080 #监听所有80端口和8080端口
2、listen IP_address:port #监听指定的地址和端口号
3、listen IP_address #监听指定ip地址所有端口
4、listen port #监听该端口的所有IP连接

  • server_name

基于名称的虚拟主机配置:

server_name   name ...;

1、对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。而每个名字由两段或者三段组成,每段之间用“.”隔开。server_name 123.com www.123.com
2、可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。server_name *.123.com www.123.*
3、还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。server_name ~^www\d+\.123\.com$;
匹配优先规则:
①、准确匹配 server_name
②、通配符在开始时匹配 server_name 成功
③、通配符在结尾时匹配 server_name 成功
④、正则表达式匹配 server_name 成功

基于 IP 地址的虚拟主机配置:
语法结构和基于名称匹配一样,而且不需要考虑通配符和正则表达式的问题。

server_name 10.16.161.103

防止使用未定义的服务器名称处理请求(如果其值与任何服务器名称都不匹配,或者请求根本不包含此标头字段,则nginx会将请求路由到该端口的默认服务器)

server {
    listen      80;
    server_name ""; #从版本0.8.48开始,这是服务器名称的默认设置,因此server_name ""可以省略
    return      444;
}
  • location

该指令用于匹配 URLlocation [ = | ~ | ~* | ^~] uri { }
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~
标识。

  • proxy_pass

该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。proxy_pass URL;URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。

proxy_pass  http://www.123.com/uri;
  • index

该指令用于设置网站的默认首页。index filename ...;后面的文件名称可以有多个,中间用空格隔开。

index  index.html index.jsp;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值