ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

【Linux入门到精通系列讲解】Nginx详细介绍和安装使用(这一篇就够了)

2021-06-10 16:02:44  阅读:122  来源: 互联网

标签:请求 nginx 代理 就够 Nginx Linux apache 服务器


文章目录

1 Nginx 介绍

传统的 Web 服务器,每个客户端连接作为一个单独的进程或线程处理,需在切换任务时将 CPU 切换到新的任务并创建一个新的运行时上下文,消耗额外的内存和 CPU 时间,当并发请求增加时,服务器响应变慢,从而对性能产生负面影响。
在这里插入图片描述
Nginx

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是,Nginx 是免费的并可以商业化,配置使用也比较简单。

Nginx 的最重要的几个使用场景:

静态资源服务,通过本地文件系统提供服务;

反向代理服务,延伸出包括缓存、负载均衡等;

API 服务,OpenResty ;

2 简单请求和非简单请求

首先我们来了解一下简单请求和非简单请求,如果同时满足下面两个条件,就属于简单请求:

请求方法是 HEAD、GET、POST 三种之一;

HTTP 头信息不超过右边着几个字段:Accept、Accept-Language、Content-Language、Last-Event-IDContent-Type 只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain;

凡是不同时满足这两个条件的,都属于非简单请求。

浏览器处理简单请求和非简单请求的方式不一样:

简单请求

对于简单请求,浏览器会在头信息中增加 Origin 字段后直接发出,Origin 字段用来说明,本次请求来自的哪个源(协议+域名+端口)。

如果服务器发现 Origin 指定的源不在许可范围内,服务器会返回一个正常的 HTTP 回应,浏览器取到回应之后发现回应的头信息中没有包含 Access-Control-Allow-Origin 字段,就抛出一个错误给 XHR 的 error 事件;

如果服务器发现 Origin 指定的域名在许可范围内,服务器返回的响应会多出几个 Access-Control- 开头的头信息字段。

非简单请求

非简单请求是那种对服务器有特殊要求的请求,比如请求方法是 PUT 或DELETE,或 Content-Type 值为 application/json。浏览器会在正式通信之前,发送一次 HTTP 预检 OPTIONS 请求,先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些 HTTP 请求方法和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XHR 请求,否则报错。

3 正向代理和反向代理

反向代理(Reverse Proxy)对应的是正向代理(Forward Proxy),他们的区别:

正向代理: 一般的访问流程是客户端直接向目标服务器发送请求并获取内容,使用正向代理后,客户端改为向代理服务器发送请求,并指定目标服务器(原始服务器),然后由代理服务器和原始服务器通信,转交请求并获得的内容,再返回给客户端。正向代理隐藏了真实的客户端,为客户端收发请求,使真实客户端对服务器不可见;

举个具体的例子 ????,你的浏览器无法直接访问谷哥,这时候可以通过一个代理服务器来帮助你访问谷哥,那么这个服务器就叫正向代理。

反向代理: 与一般访问流程相比,使用反向代理后,直接收到请求的服务器是代理服务器,然后将请求转发给内部网络上真正进行处理的服务器,得到的结果返回给客户端。反向代理隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见。一般在处理跨域请求的时候比较常用。现在基本上所有的大型网站都设置了反向代理。

举个具体的例子 ????,去饭店吃饭,可以点川菜、粤菜、江浙菜,饭店也分别有三个菜系的厨师 ????‍????,但是你作为顾客不用管哪个厨师给你做的菜,只用点菜即可,小二将你菜单中的菜分配给不同的厨师来具体处理,那么这个小二就是反向代理服务器。

简单的说,一般给客户端做代理的都是正向代理,给服务器做代理的就是反向代理。

正向代理和反向代理主要的原理区别可以参见下图:
在这里插入图片描述

4 apache与nginx的区别
  1、二者最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程 。nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式。

    2、nginx的负载能力比apache高很多。最新的服务器也改用nginx了。而且nginx改完配置能-t测试一下配置有没 有问题。

    3、apache重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群, 配合的也不错。

    4、nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。

    5、从经验来看,nginx是很不错的前端服务器,负载性能很好,nginx,用webbench模拟10000个静态文件请求毫不吃力。 apache对php等语言的支持很好,此外apache有强大的支持网络,发展时间相对nginx更久,bug少但是apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx做前端,后端用apache。大型网站建议用nginx自代的集群功能。

   6、大部分情况下nginx都优于APACHE,比如说静态文件处理、PHP-CGI的支持、反向代理功能、前端 Cache、维持连接等等。在Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数 飙升,从而拒绝服务的现象。

    7、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧!

    8、一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。
5 Nginx 在Ubuntu 上的安装,测试

5.1 Install


sudo apt install nginx

5.2 防火墙设置

防火墙设置
安装后查看防火墙:

sudo ufw app list
应该有如下显示:

Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
可以用如下方式使能nginx 防火墙

sudo ufw allow ‘Nginx HTTP’
查看防火墙状态:

sudo ufw status

5.3 Web 服务器验证

安装好nginx ,就应该启动了nginx服务,可以如下检测:

systemctl status nginx

在这里插入图片描述
在这里插入图片描述

5.4 Test

在这里插入图片描述

6 nginx 进程管理命令

停止nginx 或Web 服务:

sudo systemctl stop nginx
启动nginx 或Web 服务:

sudo systemctl start nginx
重启动:

sudo systemctl restart nginx
重新配置参数,如果只是修改配置文件,那还不生效,所以需要这个命令:

sudo systemctl reload nginx
一般情况下系统启动时,nginx 是自动启动的,如果不要启动nginx服务,需要取消使能操作:

sudo systemctl disable nginx
如果要恢复启动时启动nginx,需要使能操作:

sudo systemctl enable nginx
nginx的主要文件和目录介绍
缺省内容目录:

/var/www/html

服务器配置

服务器配置目录:

/etc/nginx: 所以配置文件都在这个目录下。

缺省配置文件:

/etc/nginx/nginx.conf: 主配置文件,改变这个文件,改变nginx的全局参数。

站点配置文件存储目录:

/etc/nginx/nginx.conf: 这个目录下文件不生效,只有link 到/etc/nginx/sites-enabled/

站点配置文件目录:

/etc/nginx/sites-enabled/: 每个站点配置文件,与主配置文件一起形成配置nginx的配置参数。

配置片段目录:

/etc/nginx/snippets: 配置文件中可以包含这些片段文件

服务器日志

/var/log/nginx/access.log:所有服务器访问记录文件

/var/log/nginx/error.log: 所有服务器错误记录文件

标签:请求,nginx,代理,就够,Nginx,Linux,apache,服务器
来源: https://blog.51cto.com/u_14013325/2889940

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有