Nginx 基础

2022-10-03  本文已影响0人  Tinyspot

1. 概念

HTTP 服务器 --> 代理服务器 --> 应用服务器
HTTP 服务器主要用来访问静态资源
应用服务器处理业务逻辑,可以生成动态的内容

1.1 Apache vs Nginx

2. Nginx 功能

2.1 正向代理

2.2 反向代理

2.3 负载均衡

2.4 动静分离

2.5 缓存加速

2.6 扩展

淘宝 Tengine

3. Nginx 安装

3.1 Windows 环境

3.2 Linux 环境

3.3 文件目录

3.4 Nginx 常用命令

4. nginx.conf

# user  nobody;
# group nobody;

# worker 子进程
# worker_processes  auto;
worker_processes  1;

events {
    worker_connections  1024; # 每个worker进程可处理的并发连接数
}

http {
    # log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    # access_log  logs/access.log  main;
    keepalive_timeout  65; # 长连接超时时间

    server {
        listen       80;            # 监听端口
        server_name  localhost;     # 监听地址
        location / {                # 请求 url 匹配
            root   html;           # 根目录
            index  index.html index.htm; # 默认页
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

4.1 组成模块

directive-command.png
Syntax: events { ... }
Default:    —
Context:    main

4.2 配置文件

4.3 location路由规则

pattern desc 优先级(降序)
location = /uri 完全匹配
location ^~ /uri 前缀匹配,^~ 表示在正则之前
location ~ pattern 正则匹配,~ 表示区分大小写
location ~* pattern 正则匹配,~* 表示不大小写
location /uri 前缀匹配,但是在正则匹配之后
location / 通用匹配,匹配任何未匹配到其它location的请求

4.4 请求行修改指令

HTTP 请求

GET /nginx/query?page=1&count=7 HTTP/1.1
Host: localhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

page=1&count=7
Syntax: proxy_method method;
Default:    —
Context:    http, server, location

Syntax: proxy_http_version 1.0 | 1.1;
Default:    
proxy_http_version 1.0;
Context:    http, server, location

Syntax: proxy_set_header field value;
Default:    
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context:    http, server, location

4.5 自定义config

指定 config 配置

start nginx -c conf/nginx-redirect.conf
nginx -s reload
http {
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://localhost:8020/nginx/query;
            proxy_method POST;
            proxy_set_header Host $host;
            # 获取客户端的 ip 放入变量X-Real-IP
            proxy_set_header X-Real-IP $remote_addr;
            # 获取所有转发请求的 ip 信息列表
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}
@RestController
@RequestMapping("/nginx")
public class NginxController {
    @RequestMapping("/query")
    public String query(HttpServletRequest request) {
        System.out.println(request.getMethod());
        System.out.println(request.getRemoteAddr());
        // 获取自定义的变量
        System.out.println(request.getHeader("X-Real-IP"));
        System.out.println(request.getHeader("X-Forwarded-For"));
        return "success";
    }
}

5. Nginx 实现虚拟主机

VPS

上一篇 下一篇

猜你喜欢

热点阅读