Nginx安装和使用

date
Apr 18, 2022
slug
nginx
status
Published
tags
Nginx
summary
Nginx配置
type
Post
 

1. 安装

nginx verison 1.20.2

1.1 下载nginx压缩包

可以到官方网站下载安装包也可以通过wget命令下载,一般会把压缩包放在/usr/local

1.2 配置nginx安装所需的环境

  1. 安装gcc 安装nginx需要先将源码进行编译,编译需要依赖gcc环境
  1. 安装PCRE pcre-devel Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。
  1. 安装zlib zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。
  1. 安装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代理转发时
  1. 如果在proxy_pass后面的url加/,表示绝对根路径;
  1. 如果没有/,表示相对路径,把匹配的路径部分也给代理走。
假设下面四种情况分别用 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日志分析

  1. 日志扫描,推荐使用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, 但这两者之间的关系差别,并没有仔细说明。
说明:
  1. 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调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。 也就是说,这项参数是系统级别的。
  1. 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中增加下面代码
 
 
 
 
 
 
 

© Wang Jiahao 2021 - 2024