Nginx安装和使用
URL
date
Apr 18, 2022
slug
nginx
status
Published
tags
Nginx
summary
Nginx配置
type
Post
1. 安装1.1 下载nginx压缩包1.2 配置nginx安装所需的环境1.3 解压nginx压缩包并安装1.4 编译安装nginx1.5 启动nginx1.6 nginx文件结构2. 配置详解3. 我的配置4. Nginx 转发模式5. Vue打包后访问6. Nginx日志分析7. 平滑升级7.1 备份7.2 下载新版本并编译8. open files的问题正向代理
1. 安装
nginx verison 1.20.2
1.1 下载nginx压缩包
可以到官方网站下载安装包也可以通过wget命令下载,一般会把压缩包放在
/usr/local
下1.2 配置nginx安装所需的环境
- 安装gcc 安装nginx需要先将源码进行编译,编译需要依赖gcc环境
- 安装PCRE pcre-devel Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。
- 安装zlib zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。
- 安装Open SSL nginx不仅支持 http协议,还支持 https(即在 ssl 协议上传输 http),如果使用了 https,需要安装 OpenSSL 库。
1.3 解压nginx压缩包并安装
configure命令
- -prefix=path — 定义服务器文件的完整路径,该路径同时也是configure命令设置的 相对路径(除类库源文件外)以及nginx.conf文件定义的相对路径的基准路径。其默认 值是/usr/local/nginx。
- -sbin-path=path — 设置nginx可执行文件的完整路径,该路径仅在安装期间使用, 默认路径为prefix/sbin/nginx。
- -conf-path=path — 设置配置文件nginx.conf的完整路径。如有必要,总是可以 在nginx启动时通过命令行参数-cfile指定一个不同的配置文件路径。 默认路径为prefix/conf/nginx.conf。
- -pid-path=path — 设置nginx.pid文件的完整路径,该文件存储了主进程的进程ID。安装完成后, 该路径总是可以在nginx.conf文件中用 pid指令来修改。 默认路径为prefix/logs/nginx.pid。
- -error-log-path=path — 设置记录主要错误、警告以及调试信息日志的完整路径。安装完成后, 该路径总是可以在nginx.conf文件中用 error_log 指令来修改。 默认路径为prefix/logs/error.log。
- -http-log-path=path — 设置记录HTTP服务器主要请求日志的完整路径。安装完成后, 该路径总是可以在nginx.conf文件用 access_log 指令来修改。 默认路径为prefix/logs/access.log
- -user=name — 设置工作进程以某非特权用户的身份运行。安装完成后,该用户名总是可以在 nginx.conf文件用user指令来修改。 其默认值为nobody。
- -group=name — 设置工作进程以某非特权用户的身份运行。安装完成后,该用户名总是可以在 nginx.conf用user指令来修改。 其默认名称与未授权用户名称相同。
- -with-select_module
- -without-select_module — 设置是否将select()方法模块编译进nginx中。如果系统平台不支持kqueue、epoll、rtsig或/dev/poll等更合适的方法, 该模块会被自动编译。
- -with-poll_module
- -without-poll_module — 设置是否将poll()方法模块编译进nginx中。如果系统平台不支持kqueue、epoll、rtsig或/dev/poll等更合适的方法, 该模块会被自动编译。
- -without-http_gzip_module — 不编译http_gzip_module模块。该模块可以压缩HTTP服务器的响应,该模块需要zlib库才能编译和运行。
- -without-http_rewrite_module — 不编译http_rewrite_module模块。该模块允许HTTP服务器重定向请求,改变请求的URI地址 。创建并运行该模块需要PCRE库支持。
- -without-http_proxy_module — 不编译HTTP服务器的代理模块。
- -with-http_ssl_module — 为HTTP服务器编译HTTPS协议支持的模块。该模块默认是不编译的。它需要OpenSSL库才能编译和运行。
- -with-pcre=path — 设置PCRE库源文件的路径地址。PCRE库的发行版(version 4.4 — 8.30)需要先从PCRE站点下载并解压缩。 剩下的安装工作由nginx的./configure和make命令来完成。该库应用于location 指令的正则表达式支持以及ngx_http_rewrite_module模块。
- -with-pcre-jit — 编译PCRE库时增加“实时编译(pcre_jit)”支持。
- -with-zlib=path — 设置zlib库源文件的路径地址。zlib库的发行版(version 1.1.3 — 1.2.5)需要先从zlib站点下载并解压缩。 剩下的安装工作由nginx的./configure和make命令来完成。该库应用于 ngx_http_gzip_module模块。
- -with-cc-opt=parameters — 设置将会添加额外参数到CFLAGS变量中。当在FreeBSD使用系统PCRE库时,需要指定 --with-cc-opt="-I /usr/local/include"。 如果需要增加select()方法所支持的文件数量,也可以参照如下方式指定:
- -with-cc-opt="-D FD_SETSIZE=2048"。
- -with-ld-opt=parameters — 设置将会在链接(linking)过程中使用的额外参数。当在FreeBSD使用系统PCRE库时,需要指定 --with-ld-opt="-L /usr/local/lib"。
例:
1.4 编译安装nginx
进入目录 /usr/local/nginx-1.17.5 进行编译
如果编译出错,请检查是否前面的4个安装都没有问题。
编译成功之后,就可以安装了
1.5 启动nginx
1.6 nginx文件结构
- 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- 5、location块:配置请求的路由,以及各种页面的处理情况。
2. 配置详解
- 1.与remoteaddr与http_x_forwarded_for 用以记录客户端的ip地址;
- 2.$remote_user :用来记录客户端用户名称;
- 3.$time_local : 用来记录访问时间与时区;
- 4.$request : 用来记录请求的url与http协议;
- 5.$status : 用来记录请求状态;成功是200,
- 6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
- 7.$http_referer:用来记录从那个页面链接访问过来的;
- 8.$http_user_agent:记录客户端浏览器的相关信息;
- 9.惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。
- 10.每个指令必须有分号结束。
3.日志配置解析
4.Nginx代理服务的配置说明
- 1.如果我们的代理只允许接受get,post请求方法的一种
- 2.负载均衡
- 3.如果使用upstream指令配置啦一组服务器作为被代理服务器,服务器中的访问算法遵循配置的负载均衡规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一组服务器处理。
- 4.通过http获取客户的真是ip而不是获取代理服务器的ip地址
代理配置的配置文件
5.Nginx负载均衡详解
- 1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
- 2、轮询:nginx默认权重就是轮询,都默认为1,服务器处理请求的顺序:ABABABABAB....
- 3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
- 4.ip_hash:nginx会让相同的客户端ip请求相同的服务器。
- 5.关于nginx负载均衡配置的几个状态参数讲解。
- down,表示当前的server暂时不参与负载均衡。
- backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
- max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
- fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
- weight 默认为1.weight越大,负载的权重就越大。
3. 我的配置
4. Nginx 转发模式
在nginx中配置proxy_pass代理转发时
- 如果在proxy_pass后面的url加/,表示绝对根路径;
- 如果没有/,表示相对路径,把匹配的路径部分也给代理走。
假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。
第一种:
代理到URL:http://127.0.0.1/test.html
第二种(相对于第一种,最后少一个 / )
代理到URL:http://127.0.0.1/proxy/test.html
第三种:
代理到URL:http://127.0.0.1/aaa/test.html
第四种(相对于第三种,最后少一个 / )
代理到URL:http://127.0.0.1/aaatest.html
5. Vue打包后访问
1.首先配置vue的路径
配置vue.config.js
配置nginx
创建目录
要注意,index.html页面要在admin文件夹根目录
如果上面的方式不行,就换一种
如果h5访问地址是 https://home.remember5.com/h5
比如现在后台publicPath想定义为/page
需要更改两个配置
nginx
router
vue.config.js
部署即可访问
6. Nginx日志分析
- 日志扫描,推荐使用goaccess
目前选择了docker安装方式,毕竟docker是跨平台,操作比较通用
mac安装,没有测试
7. 平滑升级
7.1 备份
7.2 下载新版本并编译
这一步一定要用make,不能使用make install 不然会重置配置
Nginx调优
8. open files的问题
概要:
linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。这就需要修改ulimit和file-max。特别是提供大量静态文件访问的web服务器,缓存服务器(如squid), 更要注意这个问题。
网上的教程,都只是简单说明要如何设置ulimit和file-max, 但这两者之间的关系差别,并没有仔细说明。
说明:
- file-max的含义。man proc,可得到file-max的描述: /proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be used by a process to set the per-process limit, RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages about running out of file handles, try increasing this value: 即file-max是设置 系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。 也就是说,这项参数是系统级别的。
- ulimit Provides control over the resources available to the shell and to processes started by it, on systems that allow such control. 即设置当前shell以及由它启动的进程的资源限制。 显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题
修改:
1.修改file-max
2.修改ulimit的open file,系统默认的ulimit对文件打开数量的限制是1024
附录:
附录1.
为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效,因为没有终端。
附录2.
如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了。
这时,可以考虑通过修改/proc/’程序pid’/limits来实现动态修改!!!
在nginx.conf中增加下面代码