nginx

一、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中的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

[root@www ~]# curl www.huangming.org

web2

[root@www ~]# curl www.huangming.org

web2

[root@www ~]# curl www.huangming.org

web1

[root@www ~]# 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在集群中表现更佳。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值