nginx

nginx

简介

​ nginx是一高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

​ nginx专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。

反向代理服务器

作用

请求转发(反向代理)

正向代理

​ 可以举个形象的例子来说明:有一天,A君看到C君有巧克力(资源),然后A君就想吃C君的巧克力。可是怎么办,A君和C君不熟吖,不能直接向C君要巧克力吃(访问受限)。这时A君就很苦恼,要怎样做才能吃到C君的巧克力呢?于是A君想啊想啊终于想到了一个办法,就是找和C君关系好的B君(代理),找他去和C君要巧克力,然后再从B君那里拿到巧克力吃。这样,A君就吃到C君的巧克力了,即使C君可能永远不会知道A君吃了TA的巧克力。

image-20201025220249933

反向代理

​ 同样举个例子来说明:有一天,A君想吃巧克力了,就打电话给B君,B君也没有巧克力,可是却不告诉A君,而是悄悄去向C君要了巧克力,然后给A君送了过去。A君只会以为巧克力是B君的,永远不知道C君的存在。实际上,A君只要知道B君能给到TA巧克力就足够了,至于巧克力是怎么来的,其实一点都不重要。

负载均衡

后面的话,做负载均衡用网关,比较简单,不用nginx

image-20201025231420881

动静分离

​ 比较常用的一种方法就是:把静态文件独立放在一个服务器上,从而提高我们的访问效率。

​ 比如在tomcat中放java代码,专门找一个服务器放静态资源,当访问的是java代码就去tomcat中,当访问的是静态资源就去另外一个服务器 。

image-20201026123825682

安装和使用

在windows下安装nginx

下载链接,下载稳定版windows的nginx,然后解压,在cmd运行

D:\Environment>cd /d D:\Environment\nginx-1.18.0
-- 开启
D:\Environment\nginx-1.18.0>nginx.exe

效果:光标在闪

-- 关闭
在另一个cmd中窗口输入,不建议直接关运行的窗口,会关不干净
D:\Environment\nginx-1.18.0>nginx.exe -s stop

linux下可以使用宝塔面板直接安装,但是有一个问题:面板不支持apache和nginx共存

1.一键安装依赖包

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

2.创建nginx文件夹并下载解压安装包

//进入local文件夹
cd /usr/local
//创建nginx文件夹
mkdir nginx
//进入nginx文件夹
cd nginx
//下载
wget http://nginx.org/download/nginx-1.13.7.tar.gz
//解压
tar zxvf nginx-1.13.7.tar.gz
  1. 安装nginx
//进入nginx目录
cd /usr/local/nginx/nginx-1.13.7
//执行命令
./configure
//执行make命令
make
//执行make install命令
make install
  1. 启动nginx
//进入sbin文件夹
cd /usr/local/nginx/sbin/
//启动
./nginx
//启动后可在浏览器输入ip地址查看是否成功

常用命令

进入安装目录中,sbin
cd /usr/local/nginx/sbin
//启动
./nginx 
//关闭
./nginx -s stop 
ps -ef | grep nginx

配置文件

位置

cd /www/server/nginx/conf

image-20201026073108888

组成

第一部分:全局块

​ 从配置文件开始到events之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令。

user  www www;
worker_processes auto;
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

比如worker_processes 1,值越大,可以支持并发处理量就越多

第二部分:events块

​ 主要是影响nginx服务器与用户的网络连接

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

比如worker_connections 支持最大的连接数

第三部分:http块

nginx中配置最频繁的部分,包括http块和server块

http
    {
        include       mime.types;
		#include luawaf.conf;
		....
	}
server
	{
		listen 888;
        server_name phpmyadmin;
        index index.html index.htm index.php;
        ...
	}

配置实例

以linux中的nginx为例子

反向代理1

1、实现效果

(1)打开浏览器,在浏览器地址栏中输入地址 www.123.com 跳转到linux系统主页中

2、准备工作

(1)在linux系统安装tomcat(要用jdk,java -version ,使用默认端口8080

注意:需要在服务器防火墙和阿里云中开放端口

cd /usr/local
mkdir tomcat
//安装tomcat
wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz
cd tomcat
//解压
tar zxvf apache-tomcat-9.0.39.tar.gz
//启动
cd bin
./startup.sh
//通过查看日志看是否安装成功或者直接在浏览器中输入公网:8080
cd ..
cd logs/
ls
tail -f catalina.out

3、访问过程分析

image-20201026085912416

4、具体配置

第一步 在windows系统的hosts文件进行域名和ip对应关系的配置,文件中加一行

192.168.17.129 www.123.com

测试一下

在浏览器中直接输入www.123.com是不行的,你要带一下端口号

image-20201026090544904

image-20201026090620404

第二步 在nginx进行请求转发的配置(反向代理配置)

server {
listen       80;
server_name  192.168.17.129; //修改了
#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {
root   html;
proxy_pass http://127.0.0.1:8080;//修改了,代理转发
index  index.html index.htm;
}

第三步:重启nginx,在网页输入www.123.com测试

反向代理2

1、实现效果

使用nginx反向代理,根据访问的路径跳转到不同的端口服务中

nginx监听端口为9001

访问 http://192.168.17.129:9001/edu/ 直接跳转到127.0.0.1:8080

访问 http://192.168.17.129:9001/vod/ 直接跳转到127.0.0.1:8081

2、准备工作

(1)准备两个tomcat服务器,一个8080端口,一个8081端口

就需要到其中一个tomcatconf/server.xml修改端口,避免端口冲突,要改3个地方不是一个

tomcat修改端口

(2)在webapp中创建两个文件夹和测试页面

3、具体配置

找到nginx的配置文件,配置

location中的~表示是url中包含正则表达式,并且区分大小写

 server {
        listen       9001;
        server_name  8.129.36.122;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~ /edu/ {
            proxy_pass http://127.0.0.1:8080;
        }
        location ~ /vod/ {
            proxy_pass http://127.0.0.1:8081;
        }
}

负载均衡

例子

1、实现效果

浏览器地址输入地址http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中

2、准备工作

(1)准备两台tomcat服务器,一台8080,一台8081

(2)在两台tomcat里面webapps目录中,创建一个edu文件夹,放a.html,用于测试

3、具体配置

(一)首先准备两个同时启动的Tomcat

(二)nginx.conf中进行配置

http{
	...
    upstream myserver{
        server 192.168.17.129:8080;
        server 192.168.17.129:8081;
    }
    ...
    server{
    	listen       9001;
        server_name  8.129.36.122;
    	...
    	location / {
    	 	
    		...
    		proxy_pass http://myserver;
    	}
    }
}

分配服务器策略

第一种 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动删除

第二种 weight

weight代表权重,默认是1,权重越高被分配的客户端越多。

upstream myserver{
     server 192.168.17.129:8080 weight=5;
     server 192.168.17.129:8081 weight=10;
}

第三种方式 ip_hash

每一个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享问题

upstream myserver{
		ip_hash;
        server 192.168.17.129:8080;
        server 192.168.17.129:8081;
}

第四种方式 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配

upstream myserver{
        server 192.168.17.129:8080;
        server 192.168.17.129:8081;
        fair;
}
posted @ 2020-10-26 13:32  DJ同学  阅读(103)  评论(0编辑  收藏  举报