Nginx超简单教程,小白都能看得懂_Java旅途的博客-程序员宅基地_nginx 简单

技术标签: nginx  tomcat  linux  分布式  

一 Nginx简介

1.1 什么是Nginx

Nginx是一个高性能的http和反向代理服务器,其特点是占用内存小,并发能力强。Nginx专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

1.2 反向代理

正向代理:在浏览器中配置代理服务器,通过代理服务器进行互联网访问。

反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址。

1.3 负载均衡

如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。

1.4 动静分离

为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

二 Nginx的安装

Nginx需要几个依赖包,分别是pcreopensslzlib,在安装nginx之前需要先安装这几个依赖。

2.1 安装pcre依赖

  1. 使用命令下载pcre压缩包
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
  1. 解压压缩文件
tar -xvf  pcre-8.37.tar.gz
  1. 进入解压后的名录,执行以下命令
./configure
  1. 使用以下命令进行编译安装
make && make install
  1. 查看安装的pcre版本号
pcre-config --version

2.2 安装openssl,zlib等依赖

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2.3 安装nginx

  1. nginx官网下载nginx,官网地址:https://nginx.org/download/;
  2. 将压缩包拖到服务器上;
  3. 使用命令tar -xvf nginx-1.12.2.tar.gz解压压缩包;
  4. 使用命令./configure检查;
  5. 使用命令make && make isntall编译安装;

安装成功后,在usr会多出来一个文件夹,local/nginx,在nginxsbin文件夹下有启动脚本。

2.4 启动nginx

/usr/local/nginx/sbin文件夹下,使用以下命令启动

./nginx

然后浏览器访问服务器ip,nginx默认端口是80,出现以下页面则证明nginx安装成功;

2.5 Nginx常用的命令

使用这些命令时需要进入/usr/local/nginx/sbin文件夹

  • 查看nginx的版本号
./nginx -v
  • 启动nginx
./nginx
  • 关闭nginx
./nginx -s stop
  • 重新加载nginx
./nginx -s reload

2.6 Nginx的配置文件

nginx的配置文件在/usr/local/nginx/conf中的nginx.conf。我们将nginx.conf中注释的内容删除一下。

#user  nobody;
worker_processes  1;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

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

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

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

nginx的配置文件包含三部门。

1.全局块

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

worker_processes  1;

这个代表nginx处理并发的关键配置,值越大,处理并发能力越强。但是会受到硬件、软件等约束。

2.events块

events块涉及的指令主要影响nginx服务器与用户网络的连接。

worker_connections  1024;

这个代表nginx支持的最大连接数。

3.http全局块

nginx服务器配置最频繁的部分。http全局块包含http块server块

三 Nginx配置反向代理

3.1 ngix代理流程

本地浏览器访问nginx服务器,nginx服务器反向代理tomcat服务器,当我们请求nginx的时候直接访问到tomcattomcat的安装这里就不在讲了,我将tomcatnginx安装在了同一台服务器上。

3.2 配置ip和域名的绑定关系

由于我们的nginx没有域名,为了演示,因此我们在本地host文件中配置nginx服务器ip和域名进行绑定。这个host文件的具体位置在C:\Windows\System32\drivers\etc。在host文件中增加一句配置:

47.104.xxx.xxx www.javatrip.com

前面的ip是服务器的ip地址,后面的域名是我随便起的用于绑定这个ip的一个域名。配置好之后,我们使用域名访问一下tomcat,如果能请求到omcat默认页面,则配置成功。

3.3 在nginx配置请求转发

  server {
    
        listen       80;
        server_name  localhost;

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

我们将以上默认的配置文件做个修改:

server {
    
    listen       80;
    server_name  47.104.xxx.xxx;

    location / {
    
        root   html;
        proxy_pass http://127.0.0.1:8080;
        index  index.html index.htm;
    }
}

以上这段配置的意思就是请求是47.104.xxx.xxx:80,都会转发至47.104.xxx.xxx:8080

现在浏览器访问www.javatrip.com,发现直接转发到了tomcat上了,这样简单的反向代理就完成了。

3.4 根据请求后缀分发

我们再解压一个tomcat,端口号设置为8081,分别在两个tomcatwebapps目录下面新建devprod目录,然后在该目录下写一个文件。

将请求www.javatrip.com:7001/dev转发到tomcat8080,将请求www.javatrip.com:7001/prod转发到tomcat8081。现在我们的nginx监听的端口号是7001。打开nginx的配置文件,新建一个server如下:

server {
    
    listen       7001;
    server_name  47.104.xxx.xxx;

    location ~ /dev/ {
    
        proxy_pass http://127.0.0.1:8080;
    }
    
    location ~ /prod/ {
    
        proxy_pass http://127.0.0.1:8081;
    }
}

然后试试效果,分别访问`www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果如下:

其中,配置转发的时候用到了~,其含义内容如下:

  • = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
  • ~ 为区分大小写匹配(可用正则表达式)
  • !~为区分大小写不匹配
  • ~* 为不区分大小写匹配(可用正则表达式)
  • !~*为不区分大小写不匹配
  • ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx如果路径匹配那么不测试正则表达式。

四 Nginx配置负载均衡

4.1 什么是负载均衡

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

现在我们想实现的效果是通过访问www.javatrip.com:7001/prod/a.html,将请求分别分发到两个tomcat上面去,首先我们在tomcat8080上新建一个prod的文件夹,里面放一个a.html的文件。这样tomcat8081tomcat8080两个上就都有了一个prod的文件加且里面有一个a.html的文件。

4.2 配置nginx.conf

首先,在http块中配置两个tomcat的服务列表

upstream myserver{
    
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

其次,在server块中配置规则:

server {
    
    listen       80;
    server_name  47.104.xxx.xxx;

    location / {
    
        root   html;
        proxy_pass http://myserver;
        index  index.html index.htm;
    }
}

4.3 测试效果

访问地址:www.javatrip.com:7001/prod/a.html,多刷新几次。发现有的请求到tomcat8080上,有的请求到tomcat8081上。

4.4 nginx支持的几种负载策略

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的服务器,如果服务器down了,会自动剔除。
upstream myserver{
    
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
  • weight(权重):默认为1,权重越高,分配的请求越多。
upstream myserver{
    
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=2;
}
  • ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后台服务器,可以解决session的问题。
upstream myserver{
    
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
  • fair(第三方):按后端响应时间进行分配,响应时间越短分配的请求越多。
upstream myserver{
    
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    fair;
}

由于动静分离在实际开发中也不常用,就不再写了。本篇文章做为一个nginx入门,到这里就基本完结了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37968982/article/details/107482607

智能推荐

Cocos2d-Lua(Quick-Cocos2d-x)集成第三方SDK(二)_houjia159的博客-程序员宅基地

在上一篇文章中,我们介绍了,怎么集成友盟的Cocos2d-x版本SDK,接下来我们来说下怎么将友盟的C++接口导出到Lua中使用。引擎版本: Quick-Cocos2d-x 3.3 开发系统: Windows 7 64bit编写.tolua文件我们打开libMobClickCpp\include文件夹可以看到里面有两个文件,分别是:1

Spring Security 解析(一) —— 授权过程_lglhope的博客-程序员宅基地

Spring Security 解析(一) —— 授权过程在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security 、Spring Security Oauth2 等权限、认证相关的内容、原理及设计学习并整理一遍。本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知。项目环境:JDK1.8Spr...

MR教程 华为版_书山登峰人的博客-程序员宅基地

http://developer.huawei.com/ict/cn/site-bigdata/products/fusionInsight-HD

SD系统启动卡恢复为普通SD卡的方法_鹤影随行的博客-程序员宅基地

SD系统启动卡恢复为普通SD卡的方法是:在Linux系统下使用硬盘操作命令fdisk删除多个SD卡分区后新增一个分区,再将新增分区格式化为普通SD卡分区。1、 卸载SD卡分区:umount /media/hpf/bootumount /media/hpf/rootfs 2、 使用硬盘操作命令fdisk:sudo fdisk /dev/sdb (使用ls /dev/sd,然后按Tab键,可以知道目前的sd卡是哪一个以及有多少个分区)3、 删除SD卡分区1:输入d输入14、 删除SD卡分区2

记一次web接口代码优化,全量更新改造为增量更新_Super_ever的博客-程序员宅基地_接口增量更新

线上用户反应某区域更新接口响应太慢(15s+)并且还会容易造成保存数据丢失的情况,原因是区域人员每次点击保存是全量更新操作:1.先将原先区域内的用户完全解除绑定2.再将当前的用户添加绑定这两步操作同时也是非原子操作,其他用户同时操作时会导致添加失败。第一次优化:将更新时循环查询用户信息接口调整为批量查询接口,优化并不明显使用线程池控制执行解绑和添加用户(CountDownLatch确保...

JavaScript 改变标签属性,和改变css属性_houyanhua1的博客-程序员宅基地_css修改属性

网页标题 #div1{ background-color:red; } function biangao(){ var obj=document.getElementById("d1"); var h = obj.height obj.height=h+20; //改变标签对象的属性 ,直接用obj.height } fu

随便推点

ZipKin 简单案例_小辉辉2345的博客-程序员宅基地

一.创建zipkin服务并启动pom依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1...

程序和进程的关系 ps\top\pgrep\pstree 查看进程信息_难为我小叮当的博客-程序员宅基地_ps 进程关系

这里写目录标题程序和进程的关系程序进程ps查看进程信息程序和进程的关系程序指保存在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码进程在cpu及内存中运行的程序代码动态执行的代码父、子进程(每个程序可以创建一个或多个进程)ps查看进程信息查看静态的进程统计信息其中a、u、x分别代表a:显示终端上的所有进程,包括其它用户的进程u:表示列出进程的用户x:显示所有终端的进程...

ElasticSearch DSL查询语句_帅气的程序员的博客-程序员宅基地

1 match_all 匹配所有查询{ "query": { "match_all": {} }}2 match 匹配 分词{ "query": { "match": { "ip_category": 6 } }}3 multi_match多值匹配{ "query": { "m

VS2010下如何利用TeeChart绘制三维图_houge101的博客-程序员宅基地

我用的是TeeChart8,如果用其它的朋友可能界面会不一样,具体的TeeChart8的用法请看我的上一篇博客。具体的例程也请看我的上一篇博客。好了,双击TeeChart控件,会弹出如下对话框,然后在对话框里面按照我的方式进行修改,然后点击运行即可。如有不同,请留言探讨

K8S 自动部署工具_洪晓露的博客-程序员宅基地

本文永久链接: https://www.xtplayer.cn/kubernetes/automatic-k8s-deployment-tool/你或者你的团队是否正在寻找下一代架构?或者你已经拥有了这样的架构,但是仍然在探索自动化和管理的最佳方式。在本文中,我们将借助 env0 的能力来部署 Rancher 环境。Rancher:开源 Kubernetes 管理平台对于采用容器的团队来说,Ran...

c 语言编程学习 编程环境_学习C编程语言的前5个网站_「已注销」的博客-程序员宅基地

c 语言编程学习 编程环境Let’s have a look about C programming language first, 首先让我们看一下C编程语言 The C programming language is known as mother language. This is a language which is used for making operating system ...

推荐文章

热门文章

相关标签