Nginx学习与安装

一、nginx概述

nginx是高性能的开源HTTP服务器。反向代理服务器、负载均衡器和HTTP缓存

典型的应用场景为:

(1)作为静态资源服务器(部署HTML、CSS、JS、图片等)

(2)作为 反向代理服务器,转发请求到后端应用服务器(如Tomcat、node.js)

(3) 实现负载均衡,分发请求到多个后端节点

(4) 作为API网关,处理请求过滤、认证、限流等功能。

(5)部署SSL/TLS证书,实现HTTPS加密传输

二、什么是反向代理

当我们部署项目的时候,突然就接触到了nginx,然后又提到了反向代理,所以反向代理到底是什么

首先说一下正向代理:

代理客户端帮助客户端访问目标目标服务器就是正向代理(如VPN访问境外网站),目标服务器不知道实际客户是谁

反向代理:

代理客户端代理目标服务器,客户端请求先发送到反向代理服务器,再由反向代理转

转发到后端真实服务器。所以客户端不知道实际处理请求的服务器是谁

两者逻辑正好相反

三、反向代理的流程

  1. 客户端向反向代理服务器(Nginx)发送请求(如 http://example.com/api)。
  2. Nginx 根据配置的规则(如 URL 路径、域名)判断请求应转发到哪个后端服务器(如 192.168.1.100:8080)。
  3. Nginx 将请求转发给后端服务器,并等待后端返回响应。
  4. 后端服务器处理请求后,将响应返回给 Nginx。
  5. Nginx 将响应转发给客户端,客户端感知不到后端服务器的存在。

四、Nginx反向代理配置示例+分析

php 复制代码
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       82;
        server_name  118.170.91.230;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root usr/local/myLibrary/dist;
            try_files $uri $uri /index.html;
            index index.html ie.html;

            # 禁用缓存确保获取最新HTML
            add_header Cache-Control "no-cache, no-store, must-revalidate";
            add_header Pragma "no-cache";
                                                                                                        34,0-1        Top
1.全局配置:
php 复制代码
worker_processes 1;
events {
    worker_connections 1024;
}

(1)指定了Nginx使用1个工作进程

(2)每个工作进行最多处理1024个链接

2.HTTP块配置
php 复制代码
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
3.服务器代理配置
3.1 服务器静态资源服务
php 复制代码
server {
    listen 82;
    server_name 118.178.91.230;

    location / {
        root /usr/local/myLibrary/dist;
        try_files $uri $uri/ /index.html;
        index index.html ie.html;
        
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires 0;
    }
}

(1)监听端口:82

(2)服务器名:118.178.91.230

(3)location / 处理所有请求:

  • root 指定静态文件根目录为 /usr/local/myLibrary/dist

  • try_files 尝试按顺序查找文件:先找请求的URI,再找目录,最后回退到index.html(支持前端路由)

  • index 指定默认索引文件

  • 添加了禁用缓存的HTTP头,确保客户端总是获取最新HTML

3.2 后端API代理(核心代理配置)
php 复制代码
location /prod-api/ {
    proxy_pass http://118.178.91.230:8082/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

(1)匹配规则:所有以/prod-api/开通的请求都会被代理

(2)代理目标:

  • proxy_pass http://118.178.91.230:8082/ 将请求转发到后端服务器 118.178.91.230:8082

  • 注意结尾的 / 很重要,它会将 /prod-api/xxx 转换为 http://后端服务器/xxx(去掉 /prod-api 前缀)

(3)请求头处理:

  • proxy_set_header Host $host:保持原始请求的Host头

  • X-Real-IP:传递客户端真实IP

  • X-Forwarded-For:追加代理链信息

4.梳理代理的流程:

1.当请求到达Nginx(端口号82):

如果是/prod-api/开头的请求->转发到后端 http://118.178.91.230:8082/

其他请求->尝试从/usr/local/myLibrary/dist提供静态文件

2.代理转发时:

  • 例如请求 http://118.178.91.230:82/prod-api/user

  • Nginx会将其转发到 http://118.178.91.230:8082/user

  • 后端响应后,Nginx再将响应返回给客户端

3.静态文件服务:

  • 当请求前端资源时,Nginx直接返回文件系统中的文件

  • 对于前端路由(如React/Vue的单页应用),通过 try_files 回退到 index.html

你有没有一个疑问,为什么再配置后端api代理时为什么要使用/prod-api/作为api请求前缀

由你的前端开发时设计决定的(我这里是基于若依框架开发的)

php 复制代码
# 页面标题
VUE_APP_TITLE = 若依管理系统

# 生产环境配置
ENV = 'production'

# 若依管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'

五、Nginx的安装

(1)创建路径

(2)解压

(3)配置编译编译方法

./configure

可以看到配置编译后的结果信息:

(4)编译nginx

在nginx源文件目录中直接运行 make指令

(5)安装nginx

(6)安装nginx

ok,nginx的工作区形成了

(7)更改nginx.conf配置文件

相关推荐
用户03284722207012 小时前
如何搭建本地yum源(上)
运维
ping某2 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦4 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw