【Nginx快速扫盲】01 小白也能看懂的Nginx入门

写在前面,大家好!我是【跨考菌】,一枚跨界的程序猿,专注于后台技术的输出,目标成为全栈攻城狮!这博客是对我跨界过程的总结和思考。如果你也对Java后端技术感兴趣,抑或是正在纠结于跨界,都可以关注我的动态,让我们一起学习,一起进步~
我的博客地址为:【跨考菌】的博客


系列大纲,持续更新:

【Nginx快速扫盲】01 小白也能看懂的Nginx入门
【Nginx快速扫盲】超全整理nginx.conf配置文件详解
【Nginx快速扫盲】03 nginx高级功能极速入门
【Nginx快速扫盲】04史上最简单nginx规则|指令详解

在这里插入图片描述


1、nginx简介

nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。

nginx的特点占有内存少并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度京东新浪网易腾讯淘宝等。

nginx可以提供的服务包括:

  1. web服务
  2. 负载均衡
  3. web cache

nginx处理请求的逻辑图:
在这里插入图片描述

2、nginx的特性和优点

2.1、nginx的特性

  • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
  • 高度的模块化和自由软件许可证是的第三方模块层出不穷(开源)
  • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
  • 这些优秀的设计带来的极大的稳定性

2.2、nginx的优点

  • 高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数
  • 内存消耗少:在3万并发连接下,开启的10个nginx进程才消耗150M内存(15M*10=150M)
  • 配置文件非常简单:风格跟程序一样通俗易懂
  • 成本低廉:nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则- - 需要十多万至几十万人民币
  • 支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组
  • 内置的健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
  • 节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头
  • 稳定性高:用于反向代理,宕机的概率微乎其微
  • 模块化设计:模块可以动态编译
  • 外围支持好:文档全,二次开发和模块较多
  • 支持热部署:可以不停机重载配置文件
  • 支持事件驱动AIO(AsyncIO,异步IO)、mmap(Memory Map,内存映射)等性能优化

3、nginx反向代理

多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

3.1 反向代理的作用

  • 保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
  • 负载均衡,通过反向代理服务器来优化网站的负载

3.2 正向代理和反向代理的区别

在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;
在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息

下面科普一下什么是正向代理:

1)正向代理【替客户端发请求】
我的电脑无法访问谷歌,另一台电脑可以访问谷歌。
在这里插入图片描述
我的电脑访问这台服务器,然后这台服务器去帮我请求google,然后把请求到的数据返回给我。设想是这样的:

在这里插入图片描述

这个过程其实就是正向代理!!

那么问题来了,怎么才能让我的这台服务器接受在我搜索hello world的时候自动帮我去访问google呢?你想到nginx好像有正向代理的功能,于是按照了nginx,并配置相关信息:

在这里插入图片描述

其中,resolver配置DNS解析IP地址,比如 Google Public DNS。(图例只是个例子,不是google dns)这时候,你在浏览器上配置上代理服务器地址和81端口,浏览器就会自动把请求转给代理服务器。
在这里插入图片描述

再看看小飞机的代理:
在这里插入图片描述
总结来了:想要实现正向代理,得配置一台转发请求的跳板服务器,同时客户端还得配置跳板服务器的代理地址。google是不知道访问的是我的电脑,只知道是我代理服务器。所以,如果当黑客去黑别人的网站,同时不想让网站追踪到你的ip地址,你就可以操控一台代理服务器去代替你攻击,这就是传说中的“肉鸡”啦!

2)反向代理

在这里插入图片描述
这时候这台代理服务器其实不掌握在我们用户手里了,而是google专门用来接受请求,同时还可以作为过滤不正常的请求,防止你们黑的的一个服务器。对我们客户端来说,不掌握在我手里的东西都是别人的,所以这台服务器是反向的,哈哈。

google有了这台代理服务器,我们客户端就接触不到他的真正服务器。google内部可以做微服务,代理服务器可以根据url转发到不同的内部服务器。

nginx的配置上你可以通过指定不同的url前缀跳转到不同的服务器哈~

好了,如果你还不理解。最后我就要放大招了,一句话:假如说正向代理是黑客手里的攻击长矛,反向代理就是google握着的一个盾牌,相互撕杀,谁也不知道是对方是谁!!

4、nginx的安装与配置

4.1、nginx的安装

创建系统用户:

groupadd -r nginx
useradd -r -M -s /sbin/nologin -g nginx nginx
# useradd -M(不创建主目录) -s /sbin/nologin(指定用户所用的shell,表示不登陆) -g(指定group) 

安装环境:

  • nginx安装依赖GCC、openssl-devel、pcre-devel和zlib-devel软件库。
  • Pcre全称(Perl Compatible Regular Expressions),中文perl兼容正则表达式,pcre官方站点
[root@xaii ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
暗转过程省略......
[root@xaii ~]# yum -y groups mark install 'Development Tools'
安装过程省略......

创建存放目录:

[root@xaii ~]# mkdir -p /var/log/nginx
[root@xaii ~]# chown -R nginx.nginx /var/log/nginx/

下载nginx,存放在/opt/nginx目录

mkdir /opt/nginx
cd /opt/nginx
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz 
mv nginx-1.12.0.tar.gz nginx

编译安装nginx

cd /opt/nginx

./configure \
 --prefix=/usr/local/nginx \
 --user=nginx \
 --group=nginx \
 --with-debug \
 --with-http_ssl_module \
 --with-http_realip_module \
 --with-http_image_filter_module \
 --with-http_gunzip_module \
 --with-http_gzip_static_module \
 --with-http_stub_status_module \
 --http-log-path=/var/log/nginx/access.log \
 --error-log-path=/var/log/nginx/error.log
# --prefix=PATH : 指定nginx的安装目录。默认 /usr/local/nginx
# --conf-path=PATH : 设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf
# --user=name: 设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。--group=name类似
# --with-pcre : 设置PCRE库的源码路径,如果已通过yum方式安装,使用--with-pcre自动找到库文件。使用--with-pcre=PATH时,需要从PCRE网站下载pcre库的源码(版本4.4 – 8.30)并解压,剩下的就交给Nginx的./configure和make来完成。perl正则表达式使用在location指令和 ngx_http_rewrite_module模块中。
# --with-zlib=PATH : 指定 zlib(版本1.1.3 – 1.2.5)的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module时需要使用zlib 。
# --with-http_ssl_module : 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装
# --with-http_stub_status_module : 用来监控 Nginx 的当前状态
# --with-http_realip_module : 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址
# --add-module=PATH : 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译)




make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install # 编译

4.2、nginx的配置

1)、添加环境变量

vim /etc/profile

添加以下内容:
在这里插入图片描述

立即生效:

souce /etc/profile

2)、使用nginx命令【重要】

nginx -t # 检查配置文件语法
nginx -v # 检查nginx版本
nginx -c /opt/nginx/nginx.conf  # 通过-c指定配置文件。这里使用的是/opt/nginx/nginx.conf的配置文件(可以事先将/usr/local/nginx/conf下的nginx.conf和mine.types移动到/opt/nginx目录下。)
nginx -s stop # 关闭nginx
nginx -s reload # 重启nginx。

3)、端口占用问题

//因为apache和nginx的端口都是80,当apache服务开启时,无法开始nginx服务

[root@xaii ~]# ss -antlp|grep 80
LISTEN     0      128         :::80                      :::*                   users:(("httpd",pid=4081,fd=4),("httpd",pid=4080,fd=4),("httpd",pid=4079,fd=4),("httpd",pid=4078,fd=4),("httpd",pid=4077,fd=4),("httpd",pid=4076,fd=4))
    
[root@xaii ~]# nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
^C

关闭apache服务,再重启nginx服务即可。

[root@xaii ~]# apachectl stop
[root@xaii ~]# nginx
[root@xaii ~]# ss -antlp|grep 80
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=4069,fd=6),("nginx",pid=4068,fd=6))

4)、将nginx作为服务管理

创建/etc/init.d/nginx文件,编辑相关操作脚本:

vim /etc/init.d/nginx
#! /bin/bash

nginx=/usr/local/nginx/sbin/nginx # 这里是nginx的安装位置
conf_path=/opt/nginx/nginx.conf # 这是配置文件脚本的位置

case $1 in
start)
        $nginx -c $conf_path
if [ $? -eq 0 ];then
        echo 'nginx start sucessful'
else
        echo 'nginx start faild'
fi
        ;;


restart)
        $nginx -s stop
        $nginx -c $conf_path
if [ $? -eq 0 ];then
        echo 'nginx restart sucessful'
else
        echo 'nginx restart faild'
fi
        ;;


stop)
        $nginx -s stop 2>/dev/null
if [ $? -eq 0 ];then
        echo 'nginx is off'
else
        echo 'nginx error'
fi
        ;;
esac

添加该文件的执行权限:

chmod +x /etc/init.d/nginx

利用service命令管理nginx

service nginx {start|stop|status|restart|reload|configtest}

在这里插入图片描述

如果你觉得对您有帮助,不要忘记帮博主一键三连😊哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值