Nginx是什么

是一个高性能的HTTP和反向代理web服务器(及电子邮件IMAP/POP3代理服务器),特点是占有内存少,并发能力强。
Nginx源代码是使用C语言开发的。

Nginx可以做什么

http服务器(web服务器)
反向代理服务器
负载均衡服务器
动静分离(动态文件与静态文件分离)

Nginx注重效率,能够经受高负载的考验,支持5万个并发连接数,同时对CPU和内存占用非常低。(1万个没有活动的连接仅占用2.5M的内存)

Nginx的特点

跨平台,可以在大多数类Unix操作系统上编译运行,而且也有windows版本。
Nginx的上手非常容易,配置也比较简单。
支持高并发、性能好。
稳定性好,宕机概率很低。

========================

正向代理是什么

浏览器->代理服务器->目标网站服务器
解决浏览器直接访问目标网站访问不到的问题。
此时,浏览器需要配置代理服务器。

反向代理是什么

浏览器->代理服务器[在多台目标网站服务器中用负载均衡等策略选择一台目标网站服务器]->目标网站服务器[多台中的一台]
解决网站服务器集群化后分流问题。
此时,浏览器不需要配置代理服务器,而真实的网站服务器对浏览器是不可见的(只有代理服务器可见)。

========================

负载均衡

当一个请求到来的时候,Nginx反向代理服务器通过某种方法从多台目标服务器中选择一台,这个过程就是负载均衡。
为了解决请求量过大的问题。(使用多台服务器、使用分配算法)

========================

动静分离(前后端分离)

不使用动静分离的时候:
1.tomat处理静态资源性能不高
//2.所有资源部署在同一台服务器上,压力较大。

使用动静分离的时候:
1.tomcat处理动态资源,使用一台服务器。
2.nginx处理静态资源,使用另一台服务器。

类似数据库读写分离。

========================

Nginx的安装步骤

1.下载安装包(.tar):http://nginx.org

2.放入linux服务器(先用虚拟机装好linux服务器)

3.安装Nginx依赖,pcre、openssl、zlib(推荐使用yum源自动安装,类似maven)
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

4.解压Nginx软件包
tar -xvf nginx-1.17.8.tar

5.进入解包后的文件夹,执行命令:
检查命令:
./configure
编译命令:
make
安装命令:
make install
安装完毕后在/usr/local/下会产生一个nginx目录

6.进入sbin目录中,执行启动nginx命令
./nginx

Nginx主要命令

./nginx 启动nginx
./nginx -s stop 终止nginx(或者找到nginx进程号,ps -ef|grep nginx,使用kill -9 关闭)
./nginx -s reload(重新加载nginx配置文件。conf/nginx.conf)
(-s 发起一个信号,single)

Nginx配置文件

路径:conf/nginx.conf
包含三块内容:
全局块:全局配置信息。
events块:影响nginx服务器和用户的网络连接。
http块:配置最频繁的部分,端口监听、请求转发等。

------------------------

nginx反向代理配置(一)

linux上安装nginx后,需要安装jdk,安装tomcat
之后,编写nginx配置文件:
http {
  server {
    listen 9003;
    server_name localhost;
    location / {
      # 转发请求到127.0.0.1:8080
      proxy_pass http://127.0.0.1:8080/;
    }
  }
}

然后访问:http://localhost:9003/
就能转发到tomcat路径了,不过此时浏览器url不变。(http://127.0.0.1:8080/)
(或者是linux服务器的路径例如,http://192.1.3.2:9003/)

------------------------

nginx反向代理配置(二)

http {
  server {
    listen 9003;
    server_name localhost;
    location /abc {
      # 转发请求到127.0.0.1:8080
      proxy_pass http://127.0.0.1:8080/;
    }
    location /def {
      # 转发请求到127.0.0.1:8081
      proxy_pass http://127.0.0.1:8081/;
    }
  }
}

配置了多个location,这样就实现了访问不同路径,转发到不同url

------------------------

nginx负载均衡配置

http {
  #负载均衡配置
  upstream myServers{
    server 127.0.0.1:8080;
    server 127.0.0.1:8082;
  }
  server {
    listen 9003;
    server_name localhost;
    location /abc {
      # 转发请求到127.0.0.1:8080
      proxy_pass http://myServers/;
    }
    location /def {
      # 转发请求到127.0.0.1:8081
      proxy_pass http://127.0.0.1:8081/;
    }
  }
}

配置了upstream,之后location中使用对应的名称,就实现了负载均衡。

------------------------

nginx负载均衡策略

轮询:如果其中某个服务器下线,能自动剔除。(默认策略)
权重:权重越高,被分配的请求越多。
upstream myServers{
  server 127.0.0.1:8080 weight=1;
  server 127.0.0.1:8081 weight=2;  
}

ip_hash:
每个请求按照ip的hash结果分配,每一个客户端的请求会固定分配到同一个目标服务器处理,可以解决session问题。(不用对session共享进行特殊处理了。)
upstream myServers{
  ip_hash;
  server 127.0.0.1:8080 weight=1;
  server 127.0.0.1:8081 weight=2;  
}

------------------------

Nginx动静分离配置

按照上方的方法配置动态资源路径。
按照以下方法配置静态资源路径:
http {
  server {
    listen 9003;
    server_name localhost;
    #静态资源处理,直接去nginx服务器目录中加载
    location /static/ {
      root staticData;
    }
  }
}

这样,访问的url中包含 /static/ 时,就会访问nginx服务器上的文件夹中的文件。
例如:
http://111.111.111.111:9003/static/abc.html
会对应nginx目录下的staticData目录下的static目录下的abc.html文件。(nginx/staticData/static/abc.html)

========================

Nginx底层进程分析

Nginx启动后,以daemon多进程方式在后台运行,包括一个Master进程和多个Worker进程。
master进程负责管理,比如:
接收外界信号向各worker进程发送信号;
监控worker进程运行状态,当worker进程异常退出后master进程会自动重新启动新的worker进程等。

worker进程负责处理请求,一个请求只能被一个worker进程处理,worker进程之间是相互独立的。
worker进程的个数可以设置,一般设置为与CPU核数一致。
单个worker可以处理的最大并发连接数也可以设置。

Nginx作为反向代理服务器计算最大请求并发数的公式:
workerProcess*workerConnections/4
/4是因为一个客户端对nginx请求,会在nginx与客户端之间耗费2个连接;nginx与目标服务器的请求,也会耗费2个连接。

------------------------

./nginx -s reload命令执行后,master进程会使用新的配置创建新的worker进程,关闭旧的worker进程;所以reload后的worker进程号pid会变化。

------------------------

当一个请求到来时,每个worker进程都有可能处理这个链接,因此nginx使用互斥锁来保证只有一个worker进程能够处理请求。

------------------------

nginx多进程模型的好处:
每个worker进程都是独立的,不需要加锁,节省开销。
每个worker进程都是独立的,互不影响,一个进程异常结束,不影响其它进程继续提供服务。

 

===============================

windows下Nginx配置静态资源:https://www.cnblogs.com/jiangwangxiang/p/8481661.html

可以用root指明路径,用index指明具体文件,例如:

location / {
            root   F:/htmlTest/static/;
            index login.html;
        }

 

--------------------------------------------

windows下nginx的启动与关闭命令:https://www.cnblogs.com/qianzf/p/6809427.html

找到nginx.exe所在目录,

启动:start nginx或nginx.exe

关闭:nginx.exe -s stop或nginx.exe -s quit

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐