Nginx的配置记了忘,忘了记,这东西,一般就是一套配置,到处复制,然后改改,绝大多数时候对于我们的要求就是需要知道改什么地方,nginx相关的博客,我好像不止写了一次,然而属实不怎么常用,学得快,忘得更快,然后借这次吧,重新再写一下。nginx的配置难以理解的地方。就是配置https,其实也没有什么复杂的。
教程准备
环境
如日中天的CenterOs倒了(停止维护)。于是我就换上了Ubuntu。
Linux系统:Ubuntu20.x.x
安装方式
两种安装方式,使用命令式的安装是最为简单的,但受限于网络。下载源码编译安装最为通用,但是有一点繁琐。
APT(软件源)安装
按照上面的操作如果出现最后的Html文档说明已经正确安装了。
源码安装
比较通用的一种安装方法。首先下载安装包。nginx下载,下载稳定版的即可。我这里下载的是nginx-1.20.2,点击下载到本地,上传到你的Linux服务器上。上传方法不限,弄到服务器的文件夹里即可。
进入存放tar.gz文件的目录下
命令 |
解释 |
–prefix |
指定nginx安装目录 |
–pid-path |
指定nginx的pid |
–lock-path |
锁定安装文件,防止篡改 |
–error-log-path |
错误日志 |
–http-log-path |
日志 |
–http-log-path |
日志 |
–with-http_gzip_static_module |
启用gzip模块,在线实时压缩输出数据流 |
–http-client-body-temp-path |
设定客户端请求临时目录 |
–http-proxy-temp-path |
设定http代理临时目录 |
–http-fastcgi-temp-path |
设定fastcgi临时目录 |
–http-uwsgi-temp-path |
设定uwsgi临时目录 |
–http-scgi-temp-path |
设定scgi临时目录 |
–with-http_ssl_module |
启用Https模块 |
在Ubuntu上nginx安装的两种方式都已介绍完毕,如果你用的是CentOs,那很可惜,教程并不适用。我这边呢是建议使用apt,yum这种工具去安装nginx的,优点有很多。
第一:节省服务器空间因为不需要编译环境,第二,节省开发者生命。
浅说一下APT和Yum…等等类似工具究竟是什么东西
我们在搜索的时候,有时会搜到一些apt-get命令的操作。
使用apt-get的主流Linux系统包括Debian和Ubuntu变异版本。大多数情况下,从命令行运行该工具。桌面上有几个图形前端可以使用,包括Synaptic Package Manager、Ubuntu Software Center、Aptitude和Kpackage。
Raspberry Pi和Beaglebone Black nanoLinux版用户可以很容易地使用apt-get加载程序,因为这些系统通常来自Ubuntu或Debian代码。是debian,ubuntu发行版的包管理工具,与红帽中的「yum」工具非常类似。
apt-get命令一般需要「root权限」执行,所以一般跟着sudo命令。
apt 命令行实用程序于2014年推出第一个稳定版本,用于 Debian 发行版 .deb 软件包安装。它最初在不稳定的Debian版本中使用,然后在Debian 8中成为标准。
在 Ubuntu 16.04 发行后,apt 开始流行,并以某种方式取代了 apt-get 。
随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。
大多数人不了解 apt 和 apt-get 之间的区别,并且经常在使用一个或另一个时感到困惑。
两者都是开源命令行工具,用于管理软件包,例如安装,更新,升级和删除。
但是,它们之间仍然存在一些差异。
apt
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
Yum
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。(一般CentOS就用这个)
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
默认配置解读
Default文件
学习一途,欲速则不达,真的当你完全弄懂这些配置中的符号的意思之后,你再看这些配置你的感觉是不一样的。当然我也是在一点一点的学习,我甚至装了个有图形化的Ubuntu虚拟机,为了研究nginx,这个默认生成的配置文件,我一开始是看不懂的,我也看了很长时间。😂😂😂
安装nginx没有生成各类目录文件问题解决
由于途中我需要手动安装一次,我就把使用apt安装的nginx给卸载了,并且把配置文件给删了,我再次使用apt安装时,发现不重新生成默认配置了。解决办法。依次执行。
常用配置的介绍以及样例
侦听端口
访问日志
域名
静态资产
重定向
负载均衡
keepalived
控制浏览器缓存
反向代理缓存
反向代理
SSL 协议
其实可以采用可视化的方式对 Nginx 进行配置,我在 GitHub 上发现了一款可以一键生成 Nginx 配置的神器,相当给力。
先来看看它都支持什么功能的配置:反向代理、HTTPS、HTTP/2、IPv6, 缓存、WordPress、CDN、Node.js 支持、 Python (Django) 服务器等等。
如果你想在线进行配置,只需要打开网站:https://nginxconfig.io/,按照自己的需求进行操作就行了。
操作这个的前提,也是需要你懂!!别人的理所当然是了如指掌做到的。
实战
简单的部署前后台分离的项目配置
部署前后台分离的项目,随便新建个html项目,里面写一个按钮用来发送Ajax请求。多说两句,webpack项目只是”方便“了开发,最终的产物依然是Html,Css,JavaScript。我们先手撸一个简单的项目前台项目。项目要求就是有个页面,有个按钮。点击能发送Ajax请求,且能把请求的返回内容回馈给用户。需求有了,idea打开,开码!!!
代码写好了,部署。这个很简单啊,你要是图省事,直接覆盖默认配置文件夹中的index.html即可,
很快啊,前台项目部署好了。
这时候我们需要部署后端项目了。idea打开新建springboot项目。开码!!!
核心代码,get请求返回项目运行端口号。
核心代码如上图。
很快啊后端也不,后端快不起来,需要装Java环境。稍等,很快啊后端也部署好了。后台服务的端口是8081。这时候我们很自然的想到了,把之前的Ajax中的请求urlapi/get
换成http://localhost:8081/api/get
,这样前后台应该就能连通了。于是改了一下刷新页面,再次点击,还是不行。
报错信息:
火狐浏览器是这样提示的,别的浏览器可能会有些许的差别,但不重要,重要的是,我们的前后台并没有连通!!
这个时候我们需要配置反向代理了,来规避跨域的错误。
到这里配置结束,项目就是就可以正常启动了。需要弄负载均衡,你就多跑几个服务,能进行负载均衡的项目,对项目有一点点要求,要求项目本身必须是无状态的,不然的话可能会影响到正常使用,比如如果你这个项目中是在项目里也就是内存里保存的用户的登录状态,那么你负载均衡时,就会出问题,因为负载均衡默认是轮询,你可以理解成这个节点,你登陆过,你刷新一个页面,然后就访问了新的节点,但是你的登录信息是保存在上一个节点中的,这个新节点,并没有保存你的登录信息,你就需要重新登录。这就影响功能了。所以这种情况一般使用Redis来保存一些状态信息。就可以想跑几个项目就跑几个项目了。状态,这个概念可能难以理解,但是,官方文档英文就是这个意思,理解了自然也就理解了。加油。
全部配置文件nginx.conf
配置SSL
使用openssl生成证书
openssl是目前最流行的SSL密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS协议的实现。
比如生成到:/usr/local/ssl
生成好了,一般我们直接强制https,只需要配置一个重定向即可。
完整的配置nginx.conf
常用的一般是反向代理和负载均衡。关于负载均衡的地方可以多看看,如果负载均衡中一个服务挂了的情况,会是怎么个处理情况,不同的负载均衡模式下,又有什么不同。等等,都是需要思考的。
最后应该是关于Ngixn的高可用,作为静态服务器时,Nginx的性能应该够用,反向代理时,我们主要考虑的应该是反向代理目标服务器的稳定。所以就暂且不研究Ngixn的高可用,一般主备双机之类的,真到Nginx扛不住的那时候,首先应该考虑的是架构的问题了。得上微服务了。
封