Nginx入门通俗学习笔记

目录

一、为什么要学Nginx?

二、什么是Nginx?

三、怎么用Nginx?

1、Nginx的反向代理

2、Nginx的负载均衡

3、Nginx的动静分离

4、Nginx的安装

1)下载安装Nginx

2)启动Nginx

3)检查是否启动成功

4)配置Nginx的端口号

5)关闭Nginx服务

5、Nginx配置文件

四、Nginx优化

1、文件句柄

2、合理设置nginx的进程数


一、为什么要学Nginx?

1、项目应用刚上线的时候,用户访问量是比较少的,并发量也比较小,所以将应用打成war包部署在一个tomcat上就够了,tomcat回应用户的请求响应内容给用户。 (并发量:就是服务器同时收到的请求request数量)

2、但是随着用户量的增多,并发量也会逐渐增大,这时一台tomcat服务器就处理不太过来了。

3、我们就可以将应用部署在多个服务器上,用多个服务器一起干活。 但是如果有多个服务器了,用户发送请求,到底要将请求发给哪个服务器呢?这时就需要增加一个代理服务器了,通过代理服务器来帮我们合理的转发和处理请求到干活的服务器上。

我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。 

二、什么是Nginx?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。

Nginx的主要功能有负载均衡反向代理以及动静分离。

其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

三、怎么用Nginx?

1、Nginx的反向代理

先说什么是正向代理?正向代理就是有一台服务器来代理我们客户的主机来发送请求。

比如我们客户端A在家想要直接访问外国服务器B上的资源,是不能直接访问的,但是举个例子,比如香港的一台服务器C可以直接访问外国服务器B,这时候我们可以连接上这个香港的服务器C,把我们想要访问的地址告诉服务器C,这时服务器C就帮我们去访问服务器B,将收到的响应内容再响应给我们客户端A。这台服务C就是代理服务器,整个过程就是正向代理。典型的例子就是VPN。

什么是反向代理?和正向代理相反,正向代理是代理我们客户端的,反向代理则是代理服务器端的。代理服务器代理服务器接收用户的请求,然后再将请求以一种合理的规则转发给内部的服务器。

就像我们访问百度,都是这个请求地址:www.baidu.com ,让我们感觉百度就好像只有一台服务器,但是这不可能,百度肯定有多个服务器,这个www.baidu.com就是它的代理服务器。

 而Nginx就有反向代理的功能,因此可以再服务器上安装Nginx让他充当反向代理服务器。

2、Nginx的负载均衡

什么是负载均衡?就是我们将应用部署再多台服务器上,但是这多态服务器肯定有好有坏,比如某台服务器的内存比较大,于是通过反向代理,我们希望Nginx反向代理服务器能够将请求更多的打给这台内存比较大的服务器上。使各台服务器的负载更加均衡。 

而我们Nginx提供的负载均衡策略有2种:内置策略和扩展策略。

内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。

 轮询:每台服务器的权重都一样,那请求就会依次发送给他们。

加权轮询:哪台服务器比较牛,就把它的权重设置的高一点,这样更多的请求就可以送到这台权重高的服务器上了。

 iphash:对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。性能没有提升,不推荐,可以用redis做session共享。

补充:session共享是说,用户在服务器A上进行第一次登录后,下次请求可能由负载均衡策略转发给了服务器B,那么这个登录成功的session肯定需要所有服务器共享,不共享的话,请求一到别的服务器上就需要重新登录,不合适。

3、Nginx的动静分离

nginx 的动静分离,指的是由 nginx 将客户端请求进行分类转发,静态资源请求(如html、css、图片等)由静态资源服务器处理,动态资源请求(如 jsp页面、servlet程序等)由 tomcat 服务器处理,tomcat 本身是用来处理动态资源的,同时 tomcat 也能处理静态资源,但是 tomcat 本身处理静态资源的效率并不高,而且还会带来额外的资源开销。利用 nginx 实现动静分离的架构,能够让 tomcat 专注于处理动态资源,静态资源统一由静态资源服务器处理,从而提升整个服务系统的性能 。

4、Nginx的安装

Nginx可以安装在Linux和Windows上,但是为了学习的方便,我先安装在Windows上面。

1)下载安装Nginx

nginx: download 下载稳定版本。


下载后解压即可使用,和tomcat一样,解压后如下:

2)启动Nginx

有很多种方法启动nginx

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可

如果出现以下错误,说明80端口被占用了,那就执行第4)步。

3)检查是否启动成功

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!

4)配置Nginx的端口号

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。

 当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效。但是假如你Nginx服务还没启动,就启动就可以生效。

5)关闭Nginx服务

如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx

(1)cmd切换到nginx安装目录下,输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)

(2)使用taskkill taskkill /f /t /im nginx.exe,这个命令应该在哪个目录都可以执行,没实践过。

  1. taskkill是用来终止进程的,
  2. /f是强制终止 .
  3. /t终止指定的进程和任何由此启动的子进程。
  4. /im示指定的进程名称 .

5、Nginx配置文件

###### 全局块 #####
#这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越
#多,但是会受到硬件、软件等设备的制约。
worker_processes 1; 

###### events块 #####
events {
#表示每个 work process 支持的最大连接数为 1024.
worker_connections 1024;
}

##### http块 #####
http {
    include       mime.types;
    default_type  application/octet-stream;

    #这里配置负载均衡
    upstream myserver{
        server 192.168.167.102:8088 weitht=1;
        server 192.168.167.103:8080 weitht=2;
    }


    server {
        #访问nginx的配置,访问:http://localhost:801即可访问到nginx服务器。
        listen       801;
        server_name  localhost;


        #location该指令用于匹配 URL,反向代理的配置。
        #只要访问到http://localhost:801/,就会跑到这里处理,
        location / {
            root   html;
            index  index.html index.htm;
            #会将请求转发给myserver里面设置的服务器
            proxy_pass http://myserver;
        }
l
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
    #可以有多个server
    server{
        ...
    }

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

四、Nginx优化

昨天面试了一家企业,受一位大佬指点,学技术,除了要学好基础外,还要做各种假设,直到出了问题,然后解决它,这样才能更理解这个技术,还要学深,这样出了问题,才知道如何解决。

那位大佬说,如果nginx并发量很大如何解决?我想应该是说nginx就算很强,并发量一大,也会有性能瓶颈,那么就需要对nginx进行优化了。

1、文件句柄

linux/Unix上,一切皆文件,每一次用户发起请求就会生成一个文件句柄,文件句柄可以理解为就是一个索引,所以文件句柄就会随着请求量的增多,而进程调用的频率增加,文件句柄的产生就越多,系统对文件句柄默认的限制是1024个,对Nginx来说非常小了,需要改大一点。

每个进程的最大文件打开数,所以最好与ulimit -n的值保持一致。

worker_rlimit_nofile 35535; #进程限制

2、合理设置nginx的进程数

nginx通过工作进程处理具体的请求,设置几个工作进程就代表允许几个并发。最优的设置是worker进程数量要与服务器的CPU的核数相等,Linux中我们可以用lscpu命令来找出CPU的核数。

worker_processes cpu核数;

当然还有很多其他的方式可以优化,要在具体的场景中应用到再研究记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺着听Jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值