Nginx静态内容和反向代理

文章目录

  • 一、Nginx介绍
    • [1. 简介](#1. 简介)
    • [2. 相关网站](#2. 相关网站)
    • [3. 配置文件](#3. 配置文件)
  • 二、location说明
    • [1. 匹配规则](#1. 匹配规则)
    • [2. 替换匹配部分](#2. 替换匹配部分)
  • 三、Nginx代理
    • [1. Spring服务代理](#1. Spring服务代理)
    • [2. MySQL代理](#2. MySQL代理)
    • [3. MinIO代理](#3. MinIO代理)

一、Nginx介绍

1. 简介

Nginx(读作"engine x")是一个高性能的开源HTTP和反向代理服务器。

高性能:可以处理大量的并发连接,并且具有响应速度快、资源消耗低的优点。

反向代理:可以作为反向代理服务器,负载均衡、动态内容缓存。

静态内容服务:可以快速地提供静态网页、图像、视频等静态内容的传输。

HTTP缓存:可以配置HTTP缓存策略,缓存静态内容和动态内容的响应,减轻后端服务器的负载。

安全性:具有安全性强的特点,可以进行安全的通信,支持SSL/TLS协议和HTTPS的加密连接。

2. 相关网站

Nginx官方下载

3. 配置文件

bash 复制代码
worker_processes auto;								# 开启业务进程数, 建议设置为CPU总核心数
worker_rlimit_nofile 51200;							# 打开文件数的总和

events
	{
		use epoll;									# 使用epoll模型
		worker_connections 51200;					# 客户端最大连接数
		multi_accept on;							# 同时接受多个连接请求
	}

http
	{
		include mime.types;							# 引入http mime类型
		default_type application/octet-stream;		# 默认文件类型
		client_header_buffer_size 32k;				# 接收用户请求中HTTP header部分时分配的内存buffer大小
		large_client_header_buffers 4 32k;			# 请求中的HTTP header超过client_header_buffer_size时生效
		client_max_body_size 500m;					# 允许客户端请求的最大单文件字节数
		client_body_buffer_size 512k;				# 缓冲用户端请求的最大字节数
		proxy_connect_timeout 300;					# 和后端服务器连接超时时间
		proxy_read_timeout 300;						# 连接成功后, 后端服务器响应超时时间
		proxy_send_timeout 300;						# 后端服务器数据回传超时时间
		proxy_buffer_size 32k;						# 保存用户头信息的缓冲区大小
		proxy_buffers 4 64k;						# proxy_buffers缓冲区
		proxy_busy_buffers_size 128k;				# 高负荷下缓冲大小(proxy_buffers*2)
		proxy_temp_file_write_size 128k;			# 缓存文件夹大小
		# 当其中一台返回错误码时, 可以分配到下一台服务器程序继续处理
		proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; # 111
		# 限制并发连接数以及下载带宽
		limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

		sendfile on;								# 开启高效文件传输模式
		tcp_nopush on;								# 防止网络阻塞
		tcp_nodelay on;								# 防止网络阻塞
		keepalive_timeout 300;						# 客户端连接保持活动的超时时间

		# FastCGI配置, 改善网站的性能
		fastcgi_connect_timeout 300;
		fastcgi_send_timeout 300;
		fastcgi_read_timeout 300;
		fastcgi_buffer_size 64k;
		fastcgi_buffers 4 64k;
		fastcgi_busy_buffers_size 128k;
		fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;

		# gzip压缩配置
		gzip on;
		gzip_min_length 1k;
		gzip_buffers 4 16k;
		gzip_http_version 1.1;
		gzip_comp_level 2;
		gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
		gzip_vary on;
		gzip_proxied expired no-cache no-store private auth;
		gzip_disable "MSIE [1-6]\.";

		# 虚拟主机, 可以配置多个
		server
			{
				listen 8080;								# Nginx监听端口号

				# 设置静态内容服务
				location / {
					alias /usr/share/nginx/html/;
				}

				# 设置反向代理
				location /test/base/api/ {
					proxy_pass http://127.0.0.1:8002/base/api/;
				}

				# 设置Nginx状态模块
				location /nginx_status {
					stub_status on;
					access_log off;
					allow 127.0.0.1;
					deny all;
				}

				# 未匹配uri禁止访问
				location ~ /\.
				{
					deny all;
				}
			}
}

二、location说明

1. 匹配规则

语法 匹配规则 优先级
= 精确匹配uri完整路径, 如果匹配成功,则立即处理请求 1
^~ 前缀匹配,会匹配表达式最长的那个 2
~ 区分大小写的正则匹配, 如果匹配成功,则立即处理请求 3
~* 不区分大小写的正则匹配, 如果匹配成功,则立即处理请求 3
不带修饰符匹配,会匹配表达式最长的那个 4
/ 通用匹配 5
bash 复制代码
location /a/b/ {			# 规则1
	return 101;
}
location = /a/b/ {			# 规则2
	return 102;
}
location ^~ /a/b/c/ {		# 规则3
	return 103;
}
location ^~ /a/b/c/d/ {		# 规则4
	return 104;
}
location ~ /a/b/ {			# 规则5
	return 105;
}
location ~* /a/b/ {			# 规则6
	return 106;
}
location /b/c/ {			# 规则7
	return 107;
}
location /b/ {				# 规则8
	return 108;
}
location / {				# 规则9
	return 109;
}

# 精确匹配,返回状态码 102
curl -I http://127.0.0.1:8080/a/b/
# 前缀匹配,返回状态码 103
curl -I http://127.0.0.1:8080/a/b/c/d?e=1
# 前缀匹配,返回状态码 104
curl -I http://127.0.0.1:8080/a/b/c/d/e?f=1
# 区分大小写正则匹配,返回状态码 105
curl -I http://127.0.0.1:8080/a/b/c?d=1
# 不区分大小写正则匹配,返回状态码 106
curl -I http://127.0.0.1:8080/a/B/c?d=1
# 不带修饰符匹配,返回状态码 107
curl -I http://127.0.0.1:8080/b/c/d?e=1
# 不带修饰符匹配,返回状态码 108
curl -I http://127.0.0.1:8080/b/c?d=1
# 通用匹配,返回状态码 109
curl -I http://127.0.0.1:8080/b?d=1

2. 替换匹配部分

语法 说明
proxy_pass不带/ 把请求的path拼接到proxy_pass之后
proxy_pass带/ 匹配成功的部分剪切掉后再拼接到proxy_pass之后
bash 复制代码
# 访问地址:http://127.0.0.1:8080/test/api
location /test/api {
	proxy_pass http://127.0.0.1:8080;
}

# 访问地址:http://127.0.0.1:8080/api/
location /test/api/ {
	proxy_pass http://127.0.0.1:8080/api/;
}

三、Nginx代理

1. Spring服务代理

bash 复制代码
# 前端静态内容
location /test/spring/ {
	alias /usr/share/nginx/html/spring/;
}

# 后端接口反向代理
location /test/spring/api/ {
	proxy_pass http://127.0.0.1:8080/spring/api/;
	# nginx转发时保留原始请求域名信息
	proxy_redirect off;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

2. MySQL代理

stream标签和http同级

bash 复制代码
stream
	{
		allow 192.168.1.12;
		deny all;
		server
			{
				listen 3306;
				proxy_pass 192.168.1.11:3306;
			}
	}

3. MinIO代理

bash 复制代码
location /test/minio/ {
	proxy_pass http://192.168.1.11:9000/; 
	proxy_set_header Host $http_host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
	proxy_connect_timeout 300;
	proxy_http_version 1.1;
	proxy_set_header Connection "";
	chunked_transfer_encoding off;
}
相关推荐
苹果醋326 分钟前
SpringCloud系列之一---搭建高可用的Eureka注册中心
运维·nginx
丶21364 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
ZHOU西口15 小时前
微服务实战系列之玩转Docker(十五)
nginx·docker·微服务·云原生·swarm·docker swarm·dockerui
苹果醋319 小时前
react 路由 react-router/react-router-dom
运维·nginx
ps酷教程1 天前
nginx进阶篇(二)
nginx
双普拉斯1 天前
微信小程序点赞动画特效实现
nginx·微信小程序·notepad++
苏少朋1 天前
Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解
linux·nginx·docker·容器
比花花解语1 天前
怎么使用nginx把80端口代理到想要的端口?
运维·nginx
ps酷教程1 天前
nginx基础篇(一)
nginx
爱吃龙利鱼2 天前
nginx实现https安全访问的详细配置过程
运维·nginx·安全·云原生·https