欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx

程序员文章站 2022-07-12 16:57:41
...

一、NGINX和Apache的对比

nginx是一个很强大的web反向代理服务器,它具有很多优越的特性,在高连接并发的情况下,nginx是apache服务器不错的替代品,能够支持50000个并发连接数的响应。

Apache的优点:

  1. apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache

  2. apache 发展到现在,模块超多,基本想到的都可以找到

  3. apache 更为成熟,少 bug ,nginx 的 bug 相对较多

  4. apache 超稳定

  5. apache 对 PHP 支持比较简单,nginx 需要配合其他后端用

  6. apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。

  7. apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

Nginx的优点:

     

  1. 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源

  2. 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。

  3. nginx 处理静态文件好,静态处理性能比 apache 高三倍以上

  4. nginx 的设计高度模块化,编写模块相对简单

  5. nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃

  6. nginx 作为负载均衡服务器,支持 7 层负载均衡

  7. nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器

  8. 启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级

  9. 社区活跃,各种高性能模块出品迅速

  10. 阻塞并不等于同步,非阻塞也不等于异步。阻塞不阻塞的区别点在于:线程当遇到IO操作,需要等待IO返回数据时,是否能继续往下执行代码。而同步与异步的区别点在于:IO要返回的数据是需要线程主动等待,还是被动的等待数据处理完之后主动通知你。

    最好的理想方案就是:异步非阻塞。而nginx就使用的非阻塞+异步。apache使用的是同步阻塞。这也就是为什么nginx能比apache处理更多的请求更高的并发的原因。

nginx

NGINX中的i/o多路复用模型epoll:

https://blog.csdn.net/m0_38110132/article/details/75126316

二、Linux环境下nginx服务器安装,启动

1、wget下载:http://nginx.org/download/nginx-1.6.2.tar.gz

2、进行安装:

tar-zxvf nginx-1.6.2.tar.gz

3、下载所需要的依赖库文件:

yum install pcre 
yum install pcre-devel
yun install zlib 
yum install zlib-devel

4、进行configure配置:查看是否报错

cd nginx-1.6.2 && ./configure --prefix=/usr/local/nginx

5、编译安装 make && make install

6、启动nginx:

cd /usr/local/nginx目录下:看到如下4个目录

conf配置文件、html网页文件、logs日志文件、sbin主要二进制程序

启动命令:

/usr/local/nginx/sbin/nginx关闭(-s stop )重启(-s reload)

7、成功:查看是否启动(netstart -ano|grep 80)失败:可能是80端口被占用等情况,浏览器访问地址:http://192.168.1.172:80(看到欢迎页面即可)

三、nginx服务器的配置

1、进入nginx的conf目录下,打开nginx.conf文件,主要配置的是http选项的配置

 

2、nginx虚拟主机的配置在server选项下

listen 端口号

server 访问地址(域名)

root 项目根目录

index 支持的索引文件index.html index.htm

添加一个虚拟主机:

server {
    listen 8080;
    server_name test.com;
    localhsot / {
        root test.com;index index.html;
    }
}

注:这的域名没有注册的,可能浏览器无法识别,可以用IP地址代替。如果是windows环境下可以修改hosts文件

四、日志文件

1、日志文件在:logs/host.access.log目录下(一般都是访问日志),可以使用main格式(还可以自定义格式),每一个域名下都可以配置一个日志文件

对于main格式如下:

#日志文件输出格式这个位置相当于全局设置

#

2、日志文件的切分(分析)

(1)在sbin目录下写shell脚本(log.sh) ,用来备份每天访问的日志文件。注意设置文件权限

#!/bin/sh
BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=bhz.com.access.log
CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs
CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
echo $BAK_FILE
$BASE_DIR/sbin/nginx -s stop
mv $CURRENT_FILE $BAK_FILE
$BASE_DIR/sbin/nginx

(2)设置定时任务自动执行

crontab -e //打开要执行的定时任务文件

(3)输入如下命令(下面命令是每分钟备份一次),保存退出

*/1 * * * * sh /usr/local/nginx/sbin/log.sh

四、nginx_location配置

1、语法,表示uri方式定位

location = pattern {} 精准匹配

location pattern {} 一般匹配

location ~ pattern {} 正则匹配

下面是一个配置文件的例子:

nginx.conf文件

链接: https://pan.baidu.com/s/1xKWTzlWkZFdTOXSmU_IvCw 密码: g9xf

五、nginx的反向代理(proxy)

准备工作:需要安装多个Apache Tomcat来模拟服务器,官网:https://tomcat.apache.org/download-70.cgi

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。 

反向代理可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制之外,还可以进行负载均衡,将用户请求分配给多个服务器。

1、位置conf/nginx.conf文件中配置

在server选项下添加配置

location ~ \.jsp$ {
    #设置客户端真实IP
    proxy_set_header x-real-ip(自定义的名字) $remote_addr;
    proxy_pass http://192.168.1.171:8080;
}

六、nginx负载均衡(upstream)

1、在nginx.conf文件下配置

#设定负载均衡的服务器列表

#upstream myproject {

#weigth参数表示权值,权值越高被分配到的几率越大

#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查

#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器

#}

代理两个服务器

upstream myapp {
    server 192.168.1.171:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.1.172:8080 weight=1 max_fails=2 fail_timeout=30s;
}

2、需要在location选项中添加设置

location /{
    proxy_set_header x-real-ip $remote_addr;
    proxy_pass http://myapp;
    root html;index index.html index.htm;
}

一下来自转载http://blog.51cto.com/7424593/1744111

一、Nginx负载均衡算法

    1、轮询(默认)

        每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

    2、weight(轮询权值)

        weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

    3、ip_hash

        每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。

    4、fair

        比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

    5、url_hash

        按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

 

二、Nginx负载均衡调度状态

  在Nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态,常用的状态有:

    1、down,表示当前的server暂时不参与负载均衡

    2、backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的访问压力最低

    3、max_fails,允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。

    4、fail_timeout,请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout可以一起使用。

 

三、Nginx负载均衡配置

在Nginx配置文件的HTTP层添加upstream模块

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

http {

upstream webserver {

    server 192.168.1.209:80 weight=2 max_fails=3 fail_timeout=10s;

    server 192.168.1.250:80 weight=1 max_fails=3 fail_timeout=10s;

}

server {

    listen       80;

    server_name  www.huangming.org 192.168.1.21;

    index index.html index.htm index.php index.jsp;

 

        location / {

        proxy_pass http://webserver;

        proxy_set_header Host   $host;

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;

    }

 

}

1

2

3

4

5

6

7

8

[aaa@qq.com ~]# curl www.huangming.org

web2

[aaa@qq.com ~]# curl www.huangming.org

web2

[aaa@qq.com ~]# curl www.huangming.org

web1

[aaa@qq.com ~]# curl www.huangming.org

web2

上面的例子中的两台RealServer分别为:

        192.168.1.209

        192.168.1.250

两台RealServer都安装Nginx作为后端web服务器

 

    Nignx负载均衡功能是通过upstream模块实现的,是基于内容和应用的7层交换负载均衡。Nginx负载均衡默认对后端服务器有健康检测能力,但是检测能力较弱,仅限于端口检测,在后端服务器比较少的情况下(10台及以下)负载均衡能力表现突出。与LVS负载均衡相比,LVS是基于四层的IP负载均衡技术,具有高性能、高可用、吞吐量大等优点,LVS在集群中表现更佳。