nginx快速入门

~wangweijun 2020-11-13 07:21:42
前端 快速 nginx CSDN 入门


简介

本篇文章我们来学习一下nginx,那么首先摆在我们面前的问题就是:何为nginx?nginx能做什么?

nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,特点是占有内存少,并发能力强。nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,如:perl、php等,但不支持java,java程序只能通过与tomcat配合完成。nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验。

相关概念

为了能够更深刻地认识到nginx,这里介绍其几个十分重要的概念:

  1. 反向代理
  2. 负载均衡
  3. 动静分离

反向代理

在了解反向代理之前,我们可以来看看何为正向代理。
如果把局域网外的Internet想象成一个巨大的资源库,局域网中的用户要想访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

那么何为反向代理呢?

在反向代理中,其实客户端对代理是无感的,因为客户端不需要任何配置就能可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的ip地址。

负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一、并发请求相对较少的情况下是比较适合的,成本也低,但是随着数据的逐渐增大,目前服务器已经无法应对高并发的情况,该怎么办呢?

最简单的办法当然就是升级服务器的配置,但这种方式成本太高,倘若服务器的配置已经到达顶峰,却仍然无法抗住巨大的并发请求,这个时候该如何解决呢?

回顾刚才的反向代理,客户端发送的请求会通过反向代理服务器,而反向代理服务器会去选择目标服务器,假设现在同时有30条请求,我们有三台服务器,那么负载均衡要做的事情就是将这30条请求平均分配到三台服务器中,使得每台服务器处理的请求趋近于10条。

动静分离

为了加快网站的解析速度,通常把动态页面和静态页面由不同的服务器来解析,以此加快解析速度,降低原来单个服务器的压力。

安装教程

概念说完了,该讲讲如何安装nginx了,这里以centos6环境为例。

先来到官网下载好nginx:http://nginx.org/
在这里插入图片描述
随便下载一个版本就好了,这里以nginx-1.19.0版本为例。

然后点击这里就开始下载了:
在这里插入图片描述
下载完成后把它放到一边,我们先下载nginx所需的依赖。

执行如下指令下载pcre:

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

下载完成后对其进行解压,执行指令:

tar -xvf pcre-8.37.tar.gz

解压完成后需要进入到该目录中:

cd pcre-8.37.tar.gz

接着执行指令对其进行编译和检查:

./configure

有些同学在进行编译检查的时候可能会遇到这个问题:
在这里插入图片描述
产生这个问题是因为缺少gcc编译器,安装一下就好了,执行如下指令安装:

yum install gcc-c++

最后执行安装指令:

make && make install

到这里pcre就安装好了,接着安装一下zlib,执行指令:

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

所有依赖安装完成,就可以开始安装nginx了,还记得我们前面下载好的nginx压缩包吗,通过连接软件将压缩包放到linux环境中,或者也可以通过指令直接下载:

wget https://nginx.org/download/nginx-1.19.1 tar.gz

下载好后解压一下:

tar -xvf nginx-1.19.1 tar.gz

然后进入解压目录,执行指令:

./configure

最后执行安装指令:

make && make install

在正式启动nginx之前,我们还需要设置一下防火墙,执行指令:

vi /etc/sysconfig/iptables

将文件修改为如下内容:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

nginx的端口为80,所以我们让80端口开放即可,然后重启防火墙:

service iptables restart

此时我们来到nginx目录下的sbin:

cd /usr/local/nginx/sbin/

执行指令:

./nginx

nginx就启动了,如果遇到这个问题:

Nginx: error while loading shared libraries: libpcre.so.

只需执行这条指令即可:

ln -s /usr/local/lib/libpcre.so.1 /lib64/

成功启动后,我们查看一下linux环境的ip地址:
在这里插入图片描述
此时打开浏览器,在地址栏上输入192.168.124.7,访问成功。
在这里插入图片描述

nginx常用命令

使用nginx命令的前提是我们当前处在nginx目录中,即:/usr/local/nginx/sbin,下面介绍一些十分常用的nginx命令:

  • 查看版本
  • 启动nginx
  • 关闭nginx
  • 重新加载nginx

查看版本

./nginx -v

启动nginx

./nginx

关闭nginx

./nginx -s stop

重新加载nginx

./nginx -s reload

nginx配置实现

下面来具体实现一下nginx的配置,分为:

  1. 反向代理
  2. 负载均衡
  3. 动静分离

反向代理

在实现之前,先提出一个要求:打开浏览器,在地址栏输入www.test.com,跳转至tomcat主页面。

先来分析一下运行流程,我们在浏览器地址栏输入www.test.com之后,需要将本次请求交给nginx服务器,再由nginx服务器转向tomcat服务器,因为涉及到一个域名,所以还需要在windows系统下的hosts文件中进行配置。

首先对hosts文件进行配置,来到该目录下C:\Windows\System32\drivers\etc找到hosts文件,并做如下修改:
在这里插入图片描述
前面是ip地址,后面是域名,让二者做一个映射关系。

接下来就是在nginx中进行请求转发的配置,来到/usr/local/nginx/conf目录下,对nginx.conf文件进行修改:
在这里插入图片描述
修改完成后使用./nginx指令重新启动一下nginx,千万记得要在nginx的sbin目录下执行该指令。

最后我们测试一下,在浏览器地址栏输入www.test.com,访问成功。
在这里插入图片描述

负载均衡

下面来具体实现一下负载均衡的效果,先提出一个要求,在浏览器地址栏中输入http://192.168.124.7/test.html,将该请求分发至8080和8081端口中。

先进行准备工作,放置两个tomcat用于模拟两台服务器:
在这里插入图片描述
并对tomcat8081目录下的tomcat进行配置,将其配置成8081端口,最后分别在两个tomcat的webapps目录下存放一个html文件:
在这里插入图片描述
在这里插入图片描述
然后分别启动两个tomcat,这样准备工作就完成了,下面就要对nginx进行负载均衡的配置:
在这里插入图片描述
配置完成后重启nginx服务器。

到这里就完成了负载均衡的操作,但效果如何体现呢?看下面的演示:
在这里插入图片描述
因为nginx服务器监听的是80端口,所以我们可以省略端口号直接通过ip访问,会发现当不停地刷新页面进行请求的时候,页面有时会显示8080,有时会显示8081,这说明负载均衡已经成功实现了,nginx服务器每次都将请求平均分配给两个服务器进行处理才会出现这样的现象。

动静分离

动静分离说得通俗一点就是将所有静态请求交给nginx处理,将所有动态请求通过nginx再交给tomcat处理。

先做准备工作,在linux根目录下创建data文件夹,并在该文件夹下创建html和image文件夹,其中分别有一个test.html文件和test.png文件。
在这里插入图片描述
接下来就对nginx进行配置:
在这里插入图片描述
配置完成后同样重新启动一下nginx服务器,最后看运行效果:
在这里插入图片描述
在这里插入图片描述

版权声明
本文为[~wangweijun]所创,转载请带上原文链接,感谢
https://blizzawang.blog.csdn.net/article/details/107763725

  1. [front end -- JavaScript] knowledge point (IV) -- memory leakage in the project (I)
  2. This mechanism in JS
  3. Vue 3.0 source code learning 1 --- rendering process of components
  4. Learning the realization of canvas and simple drawing
  5. gin里获取http请求过来的参数
  6. vue3的新特性
  7. Get the parameters from HTTP request in gin
  8. New features of vue3
  9. vue-cli 引入腾讯地图(最新 api,rocketmq原理面试
  10. Vue 学习笔记(3,免费Java高级工程师学习资源
  11. Vue 学习笔记(2,Java编程视频教程
  12. Vue cli introduces Tencent maps (the latest API, rocketmq)
  13. Vue learning notes (3, free Java senior engineer learning resources)
  14. Vue learning notes (2, Java programming video tutorial)
  15. 【Vue】—props属性
  16. 【Vue】—创建组件
  17. [Vue] - props attribute
  18. [Vue] - create component
  19. 浅谈vue响应式原理及发布订阅模式和观察者模式
  20. On Vue responsive principle, publish subscribe mode and observer mode
  21. 浅谈vue响应式原理及发布订阅模式和观察者模式
  22. On Vue responsive principle, publish subscribe mode and observer mode
  23. Xiaobai can understand it. It only takes 4 steps to solve the problem of Vue keep alive cache component
  24. Publish, subscribe and observer of design patterns
  25. Summary of common content added in ES6 + (II)
  26. No.8 Vue element admin learning (III) vuex learning and login method analysis
  27. Write a mini webpack project construction tool
  28. Shopping cart (front-end static page preparation)
  29. Introduction to the fluent platform
  30. Webpack5 cache
  31. The difference between drop-down box select option and datalist
  32. CSS review (III)
  33. Node.js学习笔记【七】
  34. Node.js learning notes [VII]
  35. Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
  36. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  37. 【JQuery框架,Java编程教程视频下载
  38. [jQuery framework, Java programming tutorial video download
  39. Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
  40. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  41. 【Vue,阿里P8大佬亲自教你
  42. 【Vue基础知识总结 5,字节跳动算法工程师面试经验
  43. [Vue, Ali P8 teaches you personally
  44. [Vue basic knowledge summary 5. Interview experience of byte beating Algorithm Engineer
  45. 【问题记录】- 谷歌浏览器 Html生成PDF
  46. [problem record] - PDF generated by Google browser HTML
  47. 【问题记录】- 谷歌浏览器 Html生成PDF
  48. [problem record] - PDF generated by Google browser HTML
  49. 【JavaScript】查漏补缺 —数组中reduce()方法
  50. [JavaScript] leak checking and defect filling - reduce() method in array
  51. 【重识 HTML (3),350道Java面试真题分享
  52. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  53. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  54. [re recognize HTML (3) and share 350 real Java interview questions
  55. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  56. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  57. 【重识 HTML ,nginx面试题阿里
  58. 【重识 HTML (4),ELK原来这么简单
  59. [re recognize HTML, nginx interview questions]
  60. [re recognize HTML (4). Elk is so simple