Administrator
发布于 2023-01-06 / 14 阅读
0
0

nginx入门

什么是nginx?

nginx是一个Http服务器(或者叫web服务器)、反向代理服务器、邮件代理服务器、和通用TCP/UDP代理服务器,具有占有内存少,启动速度快,并发能力强的特点。

为什么使用nginx?

  • 正向代理——“科学上网”,访问一些网站

  • 反向代理——进行内网转发,访问真实服务器

  • 动静分离——实现前后端分离,加快静态文件的处理及访问速度

  • 负载均衡——请求分发,提高服务器使用效率

 

nginx的安装配置(以centos系统为例)

1.官网下载安装包(http://nginx.org/en/download.html)或者直接使用wget命令

2.准备安装环境(已有环境可跳过此步)

yum install gcc-c++yum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-devel

 

3.上传安装包到服务器,使用tar命令解压

4.进入解压后的文件夹,使用以下命令配置(在默认配置基础上加上了https支持,也可以自行添加其它配置项)

./configure --prefix=/usr/local/nginx --with-http_ssl_module

 

5.使用以下命令进行编译和安装

makemake install

 

6.进入  /usr/local/nginx/sbin  目录,输入./nginx即可启动nginx,查看版本号和运行状态,如下图

1672990032652.jpg

 

7.安装成功

nginx常用命令

  • 启动:./nginx

  • 停止:./nginx -s quit 或者 ./nginx -s stop 或者kill进程号

  • 测试配置:./nginx -t

  • 重启:./nginx -s reload

  • 查看进程:ps aux|grep nginx

  • 显示版本:nginx -v 或者 nginx -V

  • 开机启动:在/etc/rc.local文件底部添加一行/usr/local/nginx/sbin/nginx

 

配置文件(nginx.conf)

1.常用变量

1.$remote_addr 与 $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 :记录客户端浏览器的相关信息;

 

2.配置文件主要结构

  • main(全局配置)

  • http(服务器配置)

  • upstream(负载均衡配置)

  • server(主机配置)

  • location(url匹配配置)

 

3.全局配置

user  nobody;#指定nginx worker进程运行用户以及用户组 默认为nobodyworker_processes  1;#指定开启进程数  默认1,建议与cpu数量一致error_log  logs/error.log  notice;#定义全局错误日志文件 路径及输出级别,debug>info>notice>warn>error>critpid        logs/nginx.pid;#指定进程pid的文件名及路径worker_rlimit_nofile 65535;#用于绑定 worker 进程和 CPU,Linux 内核 2.4 以上可用。events {    worker_connections  1024;#用于定义 nginx 每个进程的最大连接数,默认1024。}

 

4.http配置

http{  #对包含文件的设定   include       mime.types;  #核心模块指令,默认类型为二进制流,未能解析时会下载文件  default_type  application/octet-stream;  #指定 nginx 日志的输出格式 main为名称  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';  #允许客户端请求的最大的单个文件字节数  client_max_body_size 20m;  #客户端请求头的 headerbuffer 大小  client_header_buffer_size 32K;  #客户端请求中较大的消息头的缓存最大数量和大小,4 为个数,128K 为大小  large_client_header_buffers 4 32k;  #参数用于开启高效文件传输模式 将 tcp_nopush 和 tcp_nodelay 两个指令设置为 no 用于防止网络阻塞  Sendfile on;  tcp_nopush on;  tcp_nodelay on;  #客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接  keepalive_timeout 60;  #客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,nginx 将返回 Request time out (408) 错误  client_header_timeout 10;  #客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,nginx 将返回 Request time out (408) 错误  client_body_timeout 10;  #响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx 将会关闭连接。  send_timeout 10;}

 

5.upstream配置

调度算法

  • 轮询(默认)——每个请求按时间顺序逐一分配到后端服务器

  • weight——权重分配,weight值越大,分配到访问的几率越高,可以理解为加权轮询

  • ip_hash——按访问ip分配,每个ip的请求固定访问一台后端服务器,可以解决session保持的问题

  • fair——根据页面加载时间和后台响应时间来对请求进行更加智能的分配

  • url_hash——每个请求url分配到同一台后端服务器

  • least_conn——根据后端服务器的连接情况分配客户请求,连接少的服务器会被优先分配请求

     

    (主要用到前三种调度方式)

#uptest 负载均衡器名称  可在后面引用upstream uptest{    weight;#调度算法    server 172.0.0.1:80 weight=1;    server 172.0.0.2:8081 weight=2;    server 172.0.0.3:80 weight=1 backup;}

server参数

  • down——表示该server暂时不参与负载

  • weight——权重,默认为1,weight值越大,分配到访问的几率越高

  • max_fails——允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误

  • fail_timeout——max_fails次失败后,暂停的时间

  • backup——只有其它所有的非backup机器down或者忙的时候,请求backup机器

    (当调度算法为 ip_hash 时,server参数状态不能是 weight 和 backup)

6.server主机配置

server{  listen 80;#监听端口  server_name  localhost;#ip或域名 多个用空格分开  charset koi8-r;#网页默认编码格式  access_log  logs/host.access.log  main;#输出日志路径及输出格式  #location 匹配请求url  location / {    root   html;#指定根目录    index  index.html index.htm;#默认首页地址  }  }

 

7.location配置

支持正则表达式和条件判断匹配,可以灵活过滤和配置请求url,此处不展开讲了,有兴趣可以网上搜索

#后缀匹配静态图片资源location ~ .*\.(png|jpg|jpeg|gif|bmp|swf)$ {  root /mnt/upload;#根目录  expires 15d;#过期时间 15天}#后端服务请求转发location /prod-api/ {  proxy_pass http://localhost:8081;#proxy_pass 转发地址}

 

总结

    以上就是nginx简单的学习入门了,想要深入学习可以参考nginx中文文档和一些优秀的博客文章,主要是请求地址的匹配规则、转发和负载均衡的应用等知识点,这里就不再多言了。


评论