《前端运维》二、Nginx--1基本概念及安装
一、Nginx基本概念
简单来说,Nginx就是一个代理服务器,什么是代理服务器呢?也就是当我们访问服务器的时候,请求不会直接请求到服务器,中间会有个代理,代理会预先于服务器处理这些请求,最后由代理决定是否要把请求提交至服务器。
那么,Nginx解决了什么问题?直接访问服务器不行么?为啥要费事的走一遍代理呢?
Nginx的优势主要有:
- 高并发、高性能
- 可扩展性好
- 高可靠性
- 热部署
- 开源许可
这样,大家就可以理解,为什么要使用Nginx了吧,主要就是为了解决传统服务器的一些局限性。Nginx的最常见的使用场景大致有以下几点:
- 静态资源服务器
- 反向代理服务
- API接口服务
下面,我们来学习下Nginx的基本架构。首先,Nginx是十分轻量的,源代码只包含核心模块。其他非核心模块都是通过模块实现,可以自由选择。然后,Nginx采用的是多进程(单线程)和多路IO复用。我们来看下具体的内容:
1、Nginx工作流程
首先,Nginx在启动后,会有一个master进程和多个互相独立的worker进程。在接收到来自外界的信号时,向各worker进程发送信号,每个进程都有可能来处理该信号。master进程能监控worker进程的运行状态,当worker进程退出或出现异常后,会自动启动新的worker进程。
2、IO多路复用
多个文件描述符的IO操作都能在一线程里并发交替顺序完成,复用线程。
3、CPU亲和
把CPU内核和nginx的工作进程绑定在一起,让每个worker进程固定在一个CPU上执行,从而减少CPU的切换并提高缓存命中率,提高性能。
4、sendfile零拷贝传输模式
二、安装Nginx
首先,假设你看了我之前写的Linux部分,那么请把服务器重置一下,我们从0、从一个干净的服务器环境开始。
其次,在安装Nginx,我们要确认关闭防火墙和停用selinux。其实,不关闭防火墙也是可以的,但是需要开放端口,这个我们后面会学习,所以,现在为了简便,直接关闭防火墙就好。另外,selinux是安全增强型linux,是Linux的一个内核模块,也是Linux的一个安全子系统,selinux最主要的作用就是最大限度地减小系统中服务进程可访问的资源,即最小权限原则。
1、关闭防火墙与selinux
- 关闭防火墙命令
- systemctl stop firewalld.service,停用防火墙。
- systemctl disable firewalld.service,永久关闭防火墙。
- systemctl status firewalld,查看防火墙状态。
- 停用selinux
- getenforce 或者/usr/sbin/sestatus -v,检查selinux状态。
- setenforce 0,临时关闭。
- 编辑/etc/selinux/config文件,把SELINUX=
enforcing
改为SELINUX=disabled,永久关闭。
然后,我们需要安装依赖模块,其实在学习Linux的部分,有讲到这些,这里也再简单重复一遍。
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake openssl openssl-devel
我们来简单解释下,这些模块都是做什么用的:
- gcc,gcc是指整个gcc的这一套工具集合,它分为gcc前端和gcc后端(我个人理解为gcc外壳和gcc引擎),gcc前端对应各种特定语言(如c++/go等)的处理(对c++/go等特定语言进行对应的语法检查, 将c++/go等语言的代码转化为c代码等),gcc后端对应把前端的c代码转为跟你的电脑硬件相关的汇编或机器码。
- gcc-c++,就软件程序包而言,gcc.rpm就是那个gcc后端,而gcc-c++.rpm就是针对c++这个特定语言的gcc前端。
- autoconf,是一个软件包,以适应多种Unix类系统的shell脚本的工具。
- pcre,Perl Compatible Regular Expressions 是一个Perl库,包括 perl 兼容的正则表达式库。
- pcre-devel,主要是供开发用,包含头文件和链接库。
- make,常指一条计算机指令,是在安装有GNU Make的计算机上的可执行指令。该指令是读入一个名为makefile的文件,然后执行这个文件中指定的指令。
- automake,可以用来帮助我们自动地生成符合自由软件惯例的Makefile。
- wget,是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。
- httpd-tools,apace压力测试。
2、安装Nginx
首先,跟其他软件的版本分类类似,Nginx也分为:
- Mainline version 开发版
- Stable version 稳定版
- Legacy versions 历史版本
这几种版本。下载地址:http://nginx.org/en/download.html。以及通过Nginx下载的方式:http://nginx.org/en/linux_packages.html#stable。
那么在CentOS下可以通过YUM来安装Nginx,通过vim,编辑/etc/yum.repos.d/nginx.repo文件:
vi /etc/yum.repos.d/nginx.repo
在其中填写如下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
然后,安装Nginx:
yum install nginx -y //安装nginx
nginx -v //查看安装的版本
nginx -V //查看编译时的参数
好了,到这里,我们基本了解了Nginx是什么,能做什么,以及成功安装了Nginx。下一篇,我们来具体的学习一下Nginx的一些核心内容。
三、Nginx目录
我们可以通过rpm -ql nginx命令,来查看nginx安装的配置文件和目录。通过该命令查询到的文件如下:
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/.build-id
/usr/lib/.build-id/2d
/usr/lib/.build-id/2d/da6018ae12edb856ad3d2cf61bf586b6b4873c
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx
/usr/share/doc/nginx/CHANGES
/usr/share/doc/nginx/README
/usr/share/doc/nginx/README.dynamic
/usr/share/licenses/nginx
/usr/share/licenses/nginx/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx
差不多有这么多,我们会调其中部分必要的进行说明,其他的大家可以自行查询哦。
- /etc/logrotate.d/nginx,日志切割文件,为了防止日志体积过大,读写困难,所以会对日志进行切割。
- /etc/nginx/nginx.conf,核心配置文件。
- /etc/nginx/conf.d/default.conf,默认http服务器配置文件。
- /etc/nginx/modules,最基本的共享库和内核模块。
- /usr/share/doc/nginx-1.14.2,帮助文档。
- /usr/share/doc/nginx-1.14.0/COPYRIGHT,版权声明。
- /usr/share/man/man8/nginx.8.gz,手册。
- /var/cache/nginx,nginx缓存目录。
- /var/log/nginx,nginx日志目录。
- /usr/sbin/nginx,可执行命令,nginx服务启动管理的可执行文件。
- /usr/sbin/nginx-debug,调试执行可执行文件。
1)nginx核心配置文件
上面的列表中,我们看到nginx核心的配置文件,我们一起来看下其中的内容:
user nginx; # 启动nginx用户
worker_processes auto; # work进程数,一般和cpu核数相等
error_log /var/log/nginx/error.log; # 错误日志路径
pid /run/nginx.pid; # 进程ID写入的文件 events { # 事件模块
worker_connections 1024; # 工作进程的最大连接数,超过的链接就会丢失
} http {
# 定义日志的格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # 用上面的格式来写日志 sendfile on; # 打开零拷贝
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; # 保持连接的超时时间 65秒
types_hash_max_size 2048; include /etc/nginx/mime.types; # 引入额外的配置文件,包含mime文件
default_type application/octet-stream; # 默认二进制类型,若在mime中找不到的话,就返回该类型, include /etc/nginx/conf.d/*.conf; # server { # 最核心的配置文件,用来作为服务配置的
listen 80 default_server; # 监听端口
listen [::]:80 default_server;
server_name _; # 服务名称,或者是域名,或者是ip
root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { # 重点中的重点,路径,“/”匹配所有的文件
# root /usr/share/nginx/html # 文件根路径,根目录
# index index.html index.htm # 索引文件,默认文件
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
上面,就是nginx核心配置文件的内容,我都加上了注释,并删除了原有的部分注释。理解起来并不难。
ps:
- 如果你发现服务器启动nginx后,通过浏览器ip地址访问但是访问不到nginx服务器,可能是因为你的服务器没开发80端口,需要阿里云或者你的云服务器上配置80端口,具体方法请自行百度。
- reload 和 restart 是有区别的。restart会粗暴的断开与客户端的连接。reload会在下一次服务接入时使用新的配置,不会终端当前处理中的旧配置请求。
- nginx -t,可以校验nginx配置文件语法是否错误。
《前端运维》二、Nginx--1基本概念及安装的更多相关文章
- 高级运维(二):搭建Nginx服务器、用户认证、基于域名的虚拟主机、SSL虚拟主机、Nginx反向代理
一.搭建Nginx服务器 目标: 在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能: 1> SSL加密功能 2> 设置Ng ...
- 《前端运维》五、k8s--1安装与基本配置
一.k8s基础概念与安装 k8s,即kubernetes是用于自动部署,扩展和管理容器化应用程序的开源系统.详细的描述就不多说了,官网有更详细的内容.简单来说,k8s,是一个可以操作多台机器调度部署镜 ...
- 企业运维实践-Nginx使用geoip2模块并利用MaxMind的GeoIP2数据库实现处理不同国家或城市的访问最佳实践指南
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 前言 ...
- [运维] 请求 nginx 出现 502 Bad Gateway 的解决方案!
环境: 云服务器镜像 Linux CentOS 7.6 已经安装并成功配置 SSL 的 nginx 1.16.1 成功安装并且可以正常运行的 apache-tomcat-9.0.26 遇到的问题: 在 ...
- 自动化运维(2)之一键式单实例安装MySQL
ZMySQLAutoTools文档 目标:自动化构建部署MySQL数据库,一键式单实例mysql安装,备份,监控,主从集群部署等.以及jdk,tomcat,nginx等基础中间件的自动化部署安装及运维 ...
- 自动化运维之-PXE实现系统批量自动安装
转自:https://www.linuxidc.com/Linux/2017-10/147379.htm 本节索引 需求分析 PXE简介 整体方案 服务选择 功能实现 安装调试 错误分析 总结 1 需 ...
- 《前端运维》二、Nginx--3静态资源服务、跨域与其他
一.静态资源服务 首先,静态资源一般是指客户端发送请求到Web服务器,web服务器从内存中取得相应的文件,返回给客户端,客户端解析并渲染出来.动态资源呢,则是由客户端发起请求,先交由web容器,web ...
- 《前端运维》二、Nginx--4代理、负载均衡与其他
一.代理服务 比较容易理解吧,简单来说.客户端访问服务器并不是直接访问的,而是通过中间代理服务器,代理服务器再去访问服务器.就像一个中转站一样,无论什么,只要从客户端到服务器,你就要通过我. 一)正向 ...
- 《前端运维》三、Docker--1镜像与容器
一.基本概念 如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装.那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统, ...
随机推荐
- 《Effective Python》笔记——第3章 类与继承
一.尽量用辅助类来维护程序的状态 如下,用字典存储简单数据 class SimpleGradebook(): def __init__(self): self.__grades = {} def ad ...
- requests库session保持持久会话
requests中cookie的原理 http://blog.csdn.net/zhu_free/article/details/50563756 requests - cookies的实现例 ...
- 基于单XCVU9P+双DSP C6678的双FMC接口 100G光纤传输加速计算卡
一.板卡概述 板卡包括一片Xilinx FPGA XCVU9P,两片 TI 多核DSP TMS320C6678及其控制管理芯片CFPGA.设计芯片满足工业级要求. FPGA VU9P 需要外接4路Q ...
- 【一天一个小知识10/20】Unity通过www获取json文本信息。
前提:领导要我在unity获取局域网服务器的文本信息.给了一个json的网络文本让我测试.我对于json以及服务器比较陌生.就直接去网上找相关的资料. 以下是自己测试的代码,没问题. 测试的网络jso ...
- [LeetCode]LCP 06. 拿硬币
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中.我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数. 示例 1: 输入:[4,2,1] 输出:4 解释:第一堆力扣 ...
- unittest测试框架,HTMLTestReportCN模块生成的测试报告中展示用例说明的配置方法
1.前言 想要生成的html测试报告中展示每个测试用例的说明信息,方便了解测试案例的测试点或者其他信息,目前知道的有2种 2.方法介绍 * 方法1: 要添加说明的测试用例,将说明信息用3个引号包裹起来 ...
- 渗透测试中dns log的使用
转至:https://www.cnblogs.com/rnss/p/11320305.html 一.预备知识 dns(域名解析): 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问 ...
- oj教程--学习顺序
1.数组 2.排序 3.递归 4.栈 5.队列 6.链表 7.二叉树 8.大数或高精度 9.枚举 10.搜索 11.字符串问题 12.贪心 13.最短路径 14.动态规划
- [炼丹术]基于SwinTransformer的目标检测训练模型学习总结
基于SwinTransformer的目标检测训练模型学习总结 一.简要介绍 Swin Transformer是2021年提出的,是一种基于Transformer的一种深度学习网络结构,在目标检测.实例 ...
- Atcoder 229
Atcoder 229 \(D.\)Longest X 题意 给定一个长度为\(N\)的字符串\(S\),\(S\)中包含$\ .\ \(和\)\ X\ \(两种字符,现在你可以将其中\)K\(个\) ...