mysql,redis通过stream转发,只能通过端口不能使用server_name,普通的端口通过http转发,可以使用server_name,并且能共用一个端口
- nginx转发mysql
stream {
allow 39.156.66.10;
deny all;
upstream cloudsocket {
hash $remote_addr consistent;
server 127.0.0.1:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 23306;#数据库服务器监听端口
proxy_connect_timeout 10s;
proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
proxy_pass cloudsocket;
}
}
将3306端口映射到23306端口
2. nginx转发redis
stream {
upstream redis_backend { server 127.0.0.1:6379; }
server {
listen 26379;
proxy_pass redis_backend;
}
}
3.nginx转发普通接口
http {
server {
listen 80;
listen [::]:80;
server_name www.baidu.com;
# return 301 https://$host$request_uri;
location / {
proxy_pass http://localhost:8080/;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.baidu.com;
ssl_certificate ssl/ www.baidu.com.cer;
ssl_certificate_key ssl/ www.baidu.com.key;
location / {
proxy_pass http://localhost:8080/;
}
}
}
4、流量镜像(不是负载均衡)
将一条请求同时分发为多个请求
http {
# 定义镜像后端服务器
upstream mirror_backend {
server mirror.example.com;
}
server {
listen 80;
server_name example.com;
location / {
# 配置主要后端
proxy_pass http://main_backend;
# 根据条件进行请求镜像 ,这个判断可以去掉
if ($http_mirror_enabled = "true") {
mirror /mirror;
}
}
# 镜像位置
location = /mirror {
internal;
proxy_pass http://mirror_backend;
# 其他配置...
}
}
}