Nginx学习(在 Docker 中使用 Nginx)

news2024/11/16 6:28:59

1. 安装Nginx

使用 docker pull nginx 下载最新的 Nginx Docker 镜像。
下载完毕后,使用 docker run -d -p 80:80 --name nginx nginx,即可启动 Nginx 容器。其中,-p 80:80 表示将容器的 80 端口映射到 主机的 80 端口;--name nginx 表示将容器命名为“nginx”。

这时候,访问主机 ip,可以看到 Nginx 的欢迎页,说明已经运行成功。

nginx

2. Nginx 配置

Nginx 的默认配置文件是 /etc/nginx/nginx.conf
使用 docker exec -it nginx /bin/sh 命令,进入 nginx 容器的命令行,然后进入 /etc/nginx 目录,查看 nginx.conf 文件。

以下是该文件内容及注释:

# 设置运行 nginx 的用户为 nginx 用户
user  nginx;

# 根据系统资源情况自动设置 worker 进程数量
worker_processes  auto;

# 指定错误日志的位置和日志级别为 notice
error_log  /var/log/nginx/error.log notice;

# 指定 nginx 的主进程 ID 存储位置
pid        /var/run/nginx.pid;

# events 块定义了事件模型和连接数配置
events {
    # 每个 worker 进程的最大连接数
    worker_connections  1024;
}

# http 块是 nginx 配置的主要部分,包含了 http 相关的配置
http {
    # 引入 mime.types 文件,该文件定义了 MIME 类型映射
    include       /etc/nginx/mime.types;

    # 设置默认 MIME 类型为 application/octet-stream
    default_type  application/octet-stream;

    # 设置日志格式 main,记录客户端访问日志
    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 功能,提高文件传输性能
    sendfile        on;

    # 如果客户端连接非常快速,则可能启用 tcp_nopush,否则请注释掉此行
    # tcp_nopush     on;

    # 客户端与服务器之间的连接保持时间,超过这个时间将会自动关闭连接
    keepalive_timeout  65;

    # 如果需要开启 gzip 压缩功能,可以去掉此行的注释
    #gzip  on;

    # 引入 /etc/nginx/conf.d/ 目录下的所有 .conf 配置文件
    include /etc/nginx/conf.d/*.conf;
}

根据上述配置,可以在 /etc/nginx/conf.d 文件夹下,找到所有的 nginx 配置文件。默认情况下,该文件夹中只有一个 default.conf 文件,查看之:

# cat default.conf
# 定义一个HTTP服务器块,监听80端口,并且同时监听IPv4和IPv6地址的80端口
server {
    listen       80;
    listen  [::]:80;
    # 服务器名为localhost,即请求的域名为localhost时,会使用该server块的配置
    server_name  localhost;

    # 注释掉以下access_log配置,表示不记录访问日志
    #access_log  /var/log/nginx/host.access.log  main;

    # 配置根目录和默认的索引文件
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # 注释掉以下error_page配置,表示不自定义错误页
    #error_page  404              /404.html;

    # 配置5xx错误码的错误页
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # 注释掉以下配置,表示不使用代理将PHP脚本传递给Apache服务器
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # 配置FastCGI服务器,将PHP脚本传递给监听在127.0.0.1:9000的FastCGI服务器
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # 注释掉以下配置,表示禁止访问.htaccess文件
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

可以看到,这里配置了 http 的监听端口,和一些跳转规则。

2.1 http 块配置

Nginx 的配置分为多个块,其中 http 块是其中的主要部分,包含了 http 的相关配置。

http 块主要可以设置以下参数:

  • include:可以引入其他配置文件。例如,include /etc/nginx/mime.types; 表示引入了 /etc/nginx/mime.types 文件,其中包含了支持的文件类型。
  • default_type: 指定默认的Content-Type,当请求的资源没有明确指定Content-Type时,将使用该默认类型。
  • log_format: 定义日志格式,可以自定义日志输出的格式,可以使用预定义的变量来包含特定信息,例如$remote_addr表示客户端IP地址,$request表示请求内容,等等。
  • access_log: 配置访问日志的路径和格式。可以指定日志输出到文件,也可以将日志重定向到标准输出流。
  • error_log: 配置错误日志的路径和日志级别。可以指定日志输出到文件,也可以将日志重定向到标准错误流。
  • sendfile: 是否开启sendfile指令。当该指令开启时,nginx会尝试使用sendfile系统调用来直接传输文件,提高文件传输效率。
  • tcp_nopush: 开启后,允许发送TCP_NODELAY选项来减少网络传输延迟。
  • keepalive_timeout: 配置HTTP keep-alive连接的超时时间。如果一个客户端在这个时间内没有发送新的请求,连接将被关闭。
  • gzip: 配置gzip压缩。开启后,nginx会对响应的内容进行gzip压缩,减少传输数据量,提高性能。
  • server: 用于配置一个虚拟主机(Server Block),包含了服务器的监听端口、域名、请求处理等配置。一个http块可以包含多个server块,用于配置多个虚拟主机。
  • location: 用于配置请求处理的规则。location块可以根据URL路径或正则表达式来匹配请求,并指定相应的处理逻辑,例如反向代理、重定向、文件处理等。
  • upstream: 配置代理服务器的集群。upstream指令用于定义一组后端服务器,并可以指定负载均衡算法来分配请求。

2.2 http - server 块配置

在 Nginx 的 http 配置中,可以包含多个 server 配置。如下:

http {
    # server块1
    server {
        # 该server块的配置
    }
    # server块2
    server {
        # 该server块的配置
    }
}

其中,server 块的主要参数包含:

  • listen: 配置服务器监听的端口号和IP地址。可以通过listen指令指定多个端口号和IP地址,比如listen 80;表示监听80端口,默认监听所有可用IP地址。
  • server_name: 配置服务器的域名或IP地址。可以配置多个域名,用空格隔开。当请求的Host头部与server_name中的某个域名匹配时,该server块将会处理该请求。
  • add_header: 用于设置响应头信息。
  • location: 用于配置请求处理的规则。location块可以根据URL路径或正则表达式来匹配请求,并指定相应的处理逻辑,例如反向代理、重定向、文件处理等。
  • access_log和error_log: 配置访问日志和错误日志的路径和格式。
  • try_files: 配置文件搜索顺序。当请求的文件不存在时,可以通过try_files指令指定多个备用文件,服务器会按照指定的顺序查找并返回第一个存在的文件。
  • gzip: 配置gzip压缩。开启后,nginx会对响应的内容进行gzip压缩,减少传输数据量,提高性能。

例如,上述提到过的 default.conf 文件,主要内容如下:

# 定义一个HTTP服务器块,监听80端口,并且同时监听IPv4和IPv6地址的80端口
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    # 注释掉以下access_log配置,表示不记录访问日志
    #access_log  /var/log/nginx/host.access.log  main;

    # 配置根目录和默认的索引文件
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # 注释掉以下error_page配置,表示不自定义错误页
    #error_page  404              /404.html;

    # 配置5xx错误码的错误页
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

该配置定义了一个名为 localhost 的 server,监听本机 80 端口。

2.3 http - server - location 配置

location 配置是Nginx中用来匹配请求URI(Uniform Resource Identifier)并指定如何处理请求的指令。在Nginx配置文件中,location 块用于根据不同的 URI 路径来定义不同的行为,如代理请求、重定向、设置缓存等。

配置类型

location 块有不同的匹配类型:

  • 普通匹配:使用前缀匹配或完全匹配来匹配请求URI。
    例如 location /example:匹配以/example开头的URI路径。
  • =:精准匹配。
    例如 location = /path/to/resource,只有当请求的URI完全等于 /path/to/resource 时,该 location 块才会生效。
  • ~:正则表达式匹配。
    例如 location ~ ^/images/.*\.jpg$:匹配以 /images/ 开头且以 .jpg 结尾的URI路径。
  • ~*:不区分大小写的正则表达式匹配。
    例如 location ~* \.jpg$:会匹配以 .jpg 结尾的URI,不区分大小写。
  • ^~:优先匹配。
    例如 location ^~ /static/:匹配以 /static/ 开头的URI路径,该匹配的优先级高于其他匹配。

配置块参数

location 配置块中可以配置一些参数,常见的如下:

  • root:指定location块的根目录,用于确定请求资源的实际文件路径。例如:root /usr/share/nginx/html;
  • alias:类似于root,但是可以将URI路径替换为指定的路径,不包括location路径。例如:alias /path/to/files;
  • try_files:定义尝试查找文件的顺序,用于处理静态文件请求。例如:try_files $uri $uri/ /index.html;
  • proxy_pass:将请求代理到指定的后端服务。例如:proxy_pass http://backend_server;
  • rewrite:重写URI,可用于重定向或修改请求URI。例如:rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
  • auth_basic:启用基本的HTTP身份验证。例如:auth_basic "Restricted Area";
  • if:条件判断,根据条件执行不同的指令。注意if指令有一些限制和陷阱,建议谨慎使用。
  • limit_rate:限制请求速率,用于限制客户端访问速度。例如:limit_rate 100k;
  • expires:设置缓存过期时间,用于控制静态资源的缓存时间。例如:expires 1d;
  • add_header:添加自定义HTTP响应头。例如:add_header X-MyHeader "My Custom Header";
  • proxy_set_header:设置代理请求头。例如:proxy_set_header X-Real-IP $remote_addr;
  • proxy_redirect:修改代理请求的重定向头。例如:proxy_redirect off;
  • proxy_pass_header:设置代理响应的头信息。例如:proxy_pass_header Server;

下面是一个简单的Nginx配置示例:

# 定义一个HTTP服务器块,监听80端口,并且设置主机名为example.com
server {
    listen 80;              # 监听80端口
    server_name example.com; # 设置主机名为example.com

    # 处理请求根路径的配置
    location / {
        root /usr/share/nginx/html; # 设置根目录为/usr/share/nginx/html
        index index.html;           # 设置默认的索引文件为index.html
    }

    # 处理以/images/开头的请求路径
    location /images/ {
        alias /var/www/images/;     # 将URI路径替换为/var/www/images/
    }

    # 处理以/api/开头且以.json结尾的请求路径
    location ~ ^/api/.*\.json$ {
        proxy_pass http://backend_server; # 将请求代理到后端服务器backend_server
    }
}

2.4 http - server - upstream 配置

upstream 块用于定义一组后端服务器,用于负载均衡或代理请求。
例如:

upstream my_backend {
    server backend_server1:8000;   # 定义第一个后端服务器,格式为 server [IP或域名]:端口
    server backend_server2:8000;   # 定义第二个后端服务器,可以配置多个服务器
    server unix:/tmp/backend.sock; # 也可以使用Unix Socket代替IP和端口
    weight=1;                      # 设置服务器的权重,默认为1,负载均衡时会根据权重分配请求
    max_fails=3;                   # 设置请求失败次数的阈值,默认为1,超过阈值后服务器被认为不可用
    fail_timeout=10s;              # 设置服务器的失败超时时间,默认为10秒
    backup;                        # 设置服务器为备份服务器,在其他服务器不可用时使用
    down;                          # 设置服务器为暂时不可用状态,不会分配请求给该服务器
}

在 upstream 块中,可以配置多个后端服务器,Nginx 会根据负载均衡算法将请求分发给这些后端服务器。
需要注意的是,如果是在 Docker 中运行的 Nginx,则这里的 server 字段可以配置为 容器名称:端口号,如 ixiaoniu:8080

在定义了 upstream 块后,便可以在 location 块中通过 proxy_pass 指令将请求代理到定义的 upstream 块中的后端服务器:

    location / {
        proxy_pass http://my_backend; # 将请求代理到名为 my_backend 的 upstream 块中定义的后端服务器
    }

3. 一些常用命令

  • docker exec -it nginx bash:进入在 Docker 中运行的 Nginx 容器命令行。
  • nginx -v:显示 Nginx 版本。
  • nginx -t:测试 Nginx 配置文件是否有错误。
  • nginx -s reload:重新加载配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1202127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

总结MYSQL中VHARCHAR和TEXT

前几天在设计表结构时,针对表中的一个字段使用text还是使用varchar是受到了开发同学的挑战。本篇文章对text和varchar的区别做个总结。 VHARCHAR和TEXT对比 char(n)varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的…

CSS常用示例100+ 【目录】

目前已有文章 11 篇 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS相关…

负债1320万美元的【思宏集团/Neo-Concep】申请900万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于香港的思宏集团Neo-Concept International Group Holdings Limited(简称:思宏集团)近期已向美国证券交易委员会(SEC)提交招股书&#xff0c…

2024dh网站导航最新,你以为它很花俏?确是牛逼的人人资源站

2024dh网站app.2024网站导航最新。2024免费中文导航。2024dh手机网站导航。2024年还好用的导航app 2024资讯导航是一个专注于新闻和资讯的视频导航网站。电影导航网站,图片导航网站,爱奇艺导航,优酷电影导航,土豆导航&#xff0c…

人物百科怎么创建?教你如何创建人物百度百科注意以下方式技巧!

百科就像互联网上的名片,不仅代表身份,而且拥有极高的可信度。因此,许多名人都希望利用百科提高自己的知名度。任何人都可以编辑人物百科词条,但为了成功上传,需要一些技巧。以下是小媒同学给大家带来的人物百科快速创…

SLAM从入门到精通(SLAM落地的难点)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在所有的slam算法中,基于反光柱的激光slam和基于二维码的视觉slam是落地最彻底的两种slam方法。和磁条、色带等传统导航方式相比较&…

汽车一键启动智能系统功能作用

在现代科技的推动下,我们的生活每天都在发生着变化。其中,汽车智能一键启动系统就是科技改变生活的最好例子之一。 首先,我们来简单了解一下汽车智能一键启动系统。它是一种利用先进的电子技术和无线通信技术,实现无需钥匙即可启…

Pass基础-DevOps

,DevOps是Dev(开发)和Ops(运维/运营)的结合,它将人、流程、工具、工程实践等等结合起来应用到IT价值流的实现过程中,是一系列原则、方法、流程、实践、工具的综合体。DevOps面向应用的全生命周期…

windows find findstr 命令学习

文章目录 windows find findstr 命令学习find 命令1. find 命令简介2. 使用语法及说明2.1 语法格式2.2 参数说明 3. 案例3.1 查看指定端口是否监听3.2 查看指定字符并忽略大小写3.3 统计包含指定字符串的行数3.4 显示行号3.5 查找结果反选 findstr 命令1. findstr 命令简介2. 使…

食醋行业分析:预计2029年将达到95亿美元

近年来中国食醋市场每年的销售量稳定增长,市场规模已经达到数百亿人民币。而在其他国家和地区,食醋也成为不可或缺的调味品之一,随着全球化和多样化的饮食趋势,国际市场对食醋的需求也不断增加。 食醋作为一种天然的酸味调节剂&am…

北京永达理慈善基金会与望京街道携手,为乡村振兴贡献10万元

东西部协作是推进巩固脱贫攻坚成果同乡村振兴有效衔接的重要手段。北京市朝阳区人民政府望京街道办事处自2021年起与内蒙古自治区通辽市科左后旗散都苏木、查日苏镇开展为期五年的结对帮扶工作,并号召全社会各界企事业单位及爱心人士帮扶助力,奉献爱心。…

修改/etc/fstab文件导致Linux无法正常启动解决方法

如果把 /etc/fstab 文件修改错了,也重启了,系统崩溃启动不了了,那该怎么办?比如: [rootlocalhost ~]# vi /etc/fstab UUIDc2ca6f57-b15c-43ea-bca0-f239083d8bd2 ext4 defaults 1 1 UUID0b23d315-33a7-48a4-bd37-9248…

浪涌保护器(SPD)常见的几种抑制器件特点及应用

浪涌保护器,Surge protection Device,是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置,适用于交流50/60HZ,额定电220V/380V的供电系统中。当电气回路或者通信线路中因为外界的干扰突然产生尖峰电流或者电压时&am…

若依框架下载文件

若依下载的逻辑是指定文件存储的路径,在ruoyi-admin模块下的application.yml中配置路径结尾必须要加/或者\结尾。 他使用的是虚拟路径映射,所以文件名必须是配置路径下真实的文件名。 若依采用的是流的方式,前端必须要用bolb的方式去接收&am…

SystemC 学习之 VCS 仿真工具安装(八)

1、安装包下载 vcs、verdi 等工具下载地址(如果下载链接失效,可以私信我) 链接:https://pan.baidu.com/s/19CtwqWcxpv-4wPyAD4_ITw 提取码:3pib vcs-mx 下载地址 链接:https://pan.baidu.com/s/1dYELrG…

K8S知识点(九)

(1)Pod详解-结构和定义 一级属性有下面这些:前两个属性是字符串,上面有定义 kind:Pod version:v1 下面的属性是object 还可以继续查看子属性:二级属性 还可以继续查看三级属性: 通…

虹科示波器 | 汽车免拆检修 | 2010款奥迪A5车怠速时发动机偶尔自动熄火

一、故障现象 一辆2010款奥迪A5车,搭载CDN发动机,累计行驶里程约为16.3万km。车主进厂反映,发动机怠速偶尔出现抖动,紧接着自动熄火;重新起动,发动机又能正常工作;故障频率较低,有时…

第二证券:定增价公布后第二天股价表现?

近年来,定增成为一种较为老练的公司融资方法,它通过向指定政策定向发行股份来筹集资金,相关于非公开发行股票或增发股份,定增的市场轰动和价格变化相对较小。但是,定增股票发行通常会推动股价的不坚决和出资者的心境崎…

代码随想录算法训练营第五十天丨 动态规划part13

300.最长递增子序列 思路 首先通过本题大家要明确什么是子序列,“子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序”。 本题也是代码随想录中子序列问题的第一题,如果没接触过这种…

采购CRM系统,这些费用你知道吗?

近些年CRM软件市场规模高速发展,技术商数量和用户数都突飞猛进。市面上产品种类丰富,系统的价格也是差距很大,从几百块到几十万不等,尽管很多厂商的价格是公开的但部署CRM之后成本很快超出了预期,实施CRM系统都有哪些费…