当前位置: 首页 > news >正文

Nginx的配置与使用

目录

一、Nginx是什么

二、使用Nginx可以做什么

三、安装Nginx

四、Nginx目录解析

五、配置Nginx

5.1、配置全局处理核数

5.2、配置events块

5.3、配置http块

5.3.1、http全局块

5.3.2、server块

5.4、日志配置

六、完整示例


一、Nginx是什么

        简单来说,Nginx是一个web代理服务器,可以用来部署web应用。更多介绍我们可以自行百度一下,毕竟目前介绍Nginx资料还是非常多的。这里就不在过多介绍了。

二、使用Nginx可以做什么

        通过了解我们知道Nginx可以用来做web服务器,简单来说把我们的代码打包后放到Nginx的html目录里,就可以启动我们的应用。但为什么不在本地或服务器上部署我们的应用服务,而多此一举到Nginx启动呢?Nginx本身作为web服务器,其自身做了很多的优化配置,常用的有:代理转发、负载均衡、资源缓存等。

        代理相信大家都了解,主要解决跨域的问题。在Nginx中配置proxy_pass参数,可以实现请求转发到后端。若条件充足有集群的情况下,配置集群ip地址,Nginx自动分发请求到不同机器上达到负载均衡的效果。

        还有一个常用的功能,目前主流前后端分离开发部署,前端所产生的静态文件(图片、视频等等)存放到对应包下,当请求静态资源时,Nginx会读取并缓存起来,提高响应速度。

三、安装Nginx

        我们可以打开 Nginx的官网下载 找到Stable version栏目下载稳定版;同时GitHub也可以下载到Nginx的发行版。

        下载完成后,解压到一个文件夹里,配置下nginx的环境变量,打开终端输入nginx -version验证是否配置成功。

四、Nginx目录解析

        下载验证完成后,我们打开解压的文件夹,一般都包括如下几个文件夹。其中conf文件夹用来配置nginx,html文件夹用来存放我们打包后的应用程序,logs文件夹用来存放nginx运行产生的日志;而启动Nginx的入口文件则在sbin文件夹中。

Nginx目录

五、配置Nginx

5.1、配置全局处理核数

        worker_processes配置用来指定应用进程数,好做分发处理,这个地方建议使用集群从核数,可以设置为 worker_processes auto;

        拓展配置:worker_cpu_affinity auto; # 自动绑定CPU

nginx配置_全局块

5.2、配置events块

        如图所示,被events花括号包裹着的就是events块的配置,这块主要是对每个worker进程的配置。如下,默认文件里会配置 worker_connections  1024; 指定了每个worker进程的连接数为1024。此外,events块还可以配置worker进程之间是否互斥等等,不过这些配置nginx都默认给的最优的配置,大多数情况下不需要重新设置。

nginx配置_events块

 

5.3、配置http块

        它来了,它来了,Nginx带着最重要的配置它来了,之前讲到的web服务、反向代理、日志等等都是在http块里进行配置的。

5.3.1、http全局块

        打开Nginx的配置的文件,默认有下面的配置。我们可以根据自身需要修改对应配置,比如日志格式化,上面都有注释的示例,供我们参照修改。

        除去默认文件给的参数,还有几个参数我们也会经常用到。

# 指定字符集

charset utf-8;

# 单次保持连接时间(一个请求发送后,超过指定时间无请求后才会关闭连接)

keepalive_timeout 65

# 单次连接最大请求数

keepalive_requests 1000
nginx配置_http全局块

 

5.3.2、server块

        配置完一些基本配置后,往下进入到server块。server这里主要是配置运行服务相关的配置,如服务ip、端口、ssl等。

# 监听服务port(启用https:listen 8787 ssl)

listen 8787;

# 监听服务ip

server_name localhost;

# 配置静态文件存放路径(相对于nginx)

root html/dist;

# 配置应用路由规则

location / {
    index  index.html index.htm;
    try_files $uri $uri/ /index.html; 
}

# 配置静态文件缓存

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
    access_log off;  # 关闭日志减少IO压力
    etag on;        # 启用ETag验证
}

# 配置访问不存在的资源或404报错统一页面

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   html;
}

# 反向代理

location /aspApi/ {
        rewrite ^/aspApi/(.*) /$1 break; 

        # 以aspApi开头的请求都会转到本地的5001服务
        proxy_pass http://localhost:5001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 6000; 
        proxy_read_timeout 6000;
}

# 负载均衡配置

# 1、配置后端服务器组
upstream backend {
    server localhost:5000 weight=3;  # 权重3
    server localhost:5000 weight=2;  # 权重2
    server localhost:5000 backup;    # 备用节点
}

# 2、server 接收转发给定义的服务器组
server {
    listen 8080;
    server_name localhost;
    location / {
        proxy_pass http://backend;  # 请求转发至 upstream 组
        proxy_set_header Host $host;
    }
}
 

ps:若有在一台服务器上部署多个应用场景,只需要再复制一个server块出来,改一下里面的监听端口和服务ip,即可开启多个应用服务,之前互不影响。

 

5.4、日志配置

        Nginx自身运行和我们应用运行产生的日志,我们可以配置日志存放路径。这对于单服务多应用很有效果,如果把日志配置放到全局,那么配置的两个server将会同用一个日志,结果就是不好区分和拍错。

        我们刚刚解析了Nginx的配置文件,其中有全局块、http块、server块。对应这三个块都可以配置,区别在于配置在全局块,那整个Nginx里所有块都会使用全局块里的日志配置;若配置在http块,则http块下所有的server都会使用;同理若配到每个server里,则只会影响当前server块里的应用日志。日志配置读取的优先级为:server > http > 全局,只会生效一个日志配置。

access_log  logs/access.log  main;
error_log  logs/error.log  info;

六、完整示例

#user  nobody;
worker_processes  auto;
worker_cpu_affinity auto;# 这里是全局(不使用全局,即使没有注释,server块里配置了会优先使用server块里的)
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;# nginx进程pid存放
pid        logs/nginx.pid;# events配置
events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;charset utf-8;sendfile        on;#tcp_nopush     on;keepalive_request  1000;keepalive_timeout  65;gzip  on;server {listen	8777;server_name	localhost;root	html/dist;# server日志配置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  logs/access.log  main;# 错误日志为info级别(可选:warn, info等)error_log  logs/error.log  info;# 路由匹配location / {index  index.html index.htm;try_files $uri $uri/ /index.html; }# 静态文件缓存location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {expires 1y;add_header Cache-Control "public, max-age=31536000, immutable";access_log off;  # 关闭日志减少IO压力etag on;        # 启用ETag验证}# 错误页面处理error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# 反向代理配置location /officeToolsApi/ {rewrite ^/officeToolsApi/(.*) /$1 break;proxy_pass http://localhost:5001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 6000; # ⏳ æ ¹æ®éœ€è¦è®¾ç½®è¶…æ—¶proxy_read_timeout 6000;}}

http://www.dtcms.com/a/275221.html

相关文章:

  • 多元思维模型:数据分析需要具备的四大能力?
  • 傅里叶方法求解正方形偏微分方程
  • Redis缓存三兄弟:穿透、击穿、雪崩全解析
  • 张量与维度
  • Grid网格布局完整功能介绍和示例演示
  • 2023年全国青少年信息素养大赛C++编程初中组决赛真题+答案解析
  • RestTemplate动态修改请求的url
  • 第一周JAVA——选择结构、循环结构、随机数、嵌套循环、数组(一维、二维)、方法、形参实参
  • 《每日AI-人工智能-编程日报》--7月11日
  • python知识:正则表达式快速入门案例:提取文章中所有的单词、提取文章中所有的数字、提取百度热搜的标题、提取ip地址
  • Web攻防-SSTI服务端模版注入利用分类语言引擎数据渲染项目工具挖掘思路
  • Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • 数据结构-双链表
  • 数字产品的专利战:要么布局称王,要么维权忙?
  • ABP VNext + Microsoft YARP:自定义反向代理与请求路由
  • 文件上传漏洞1-文件上传漏洞详细原理讲解与利用方式
  • 设计模式 - 面向对象原则:SOLID最佳实践
  • scrapy框架
  • 源表=电源+数字表?一文看懂SMU源表 2025-04-14
  • 大模型开发框架LangChain之函数调用
  • linux常用命令(一)
  • cnas实验室高效获证路径,cnas认证常见失败原因?
  • Linux711 Mysql
  • 使用node调用jira接口
  • [精选]如何解决pip安装报错ModuleNotFoundError: No module named ‘subprocess’问题
  • linux系统-----Redis主从复制
  • 生成对抗网络(GAN)原理详细讲解
  • MoE混合专家模型:千亿参数的高效推理引擎与架构革命
  • python文件操作与正则表达式综合练习