#user nobody;
#工作进程数量
worker_processes 4;
events {
#子进程最大连接数
worker_connections 1024;
}
http {
#囊括的文件类型
include mime.types;
default_type application/octet-stream;
sendfile on;
#长连接多长时间没沟通后断开
keepalive_timeout 65;
#服务器选项
server {
listen 5173;
server_name localhost;
#路由匹配
location /mobile {
#路径别名
alias html/mobile;
#查找根路径下的index.html文件 如果没有就查找index.htm文件
index index.html index.htm;
# $uri是内置的一个变量,代表当前请求的URI,不包括参数部分。
#上方都没有匹配到则再次匹配 /mobile 没有则匹配/mobile/ 查看是否存在/mobile/文件夹
# 是的话查找文件夹下的index.html
#否则直接返回html/mobile/index.html
try_files $uri $uri/ html/mobile/index.html;
}
location / {
root html/pc;
index index.html index.htm;
try_files $uri $uri/ html/pc/index.html;
}
# location /api {
# # 代理
# proxy_pass http://backend_server_ip:backend_port;
# # 代理主机名设置
# 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_set_header X-Forwarded-Proto $scheme;
# }
#如果所有路由都没有匹配上转入404
error_page 404 /404.html;
location = /404.html {
root html/404;
index index.html index.htm;
}
}
}
nginx目录
根据不同设备响应不同文件夹中的内容(文件结构同上)
#user nobody;
#工作进程数量
worker_processes 4;
events {
#最大子进程数
worker_connections 1024;
}
http {
#囊括的文件类型
include mime.types;
default_type application/octet-stream;
sendfile on;
#长连接多长时间没沟通后断开
keepalive_timeout 65;
#服务器选项
server {
listen 80;
server_name localhost;
#路由匹配
location / {
root html/pc;
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)'){
root html/mobile;
}
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
try_files $uri $uri/ =404;
}
}
负载均衡
nginx.cong配置
#user nobody;
#工作进程数量
worker_processes 4;
events {
#最大子进程数
worker_connections 1024;
}
http {
#负载均衡
upstream project {
#配置 拥有的服务器主机/域名 + 端口号
server localhost:3001;
server localhost:3002;
}
#囊括的文件类型
include mime.types;
default_type application/octet-stream;
sendfile on;
#长连接多长时间没沟通后断开
keepalive_timeout 65;
#服务器选项
server {
listen 5173;
server_name localhost;
#路由匹配
location / {
#代理到上面声明的 project项目中 格式为 http:// + 项目名称
proxy_pass http://project;
#http版本
proxy_http_version 1.1;
#设置http请求头
proxy_set_header Upgrade $http_upgrade;
#协议升级 如http升级为websocket
proxy_set_header Connection 'upgrade';
#变量 是否显示端口
#设置主机名
# $host 不显示端口 浏览器请求的ip,不显示端口
# $http_host 端口存在则显示 浏览器请求的ip和端口号
# $proxy_host 默认80端口不显示,其它显示 被代理服务的ip和端口号
proxy_set_header Host $host;
#用于定义条件跳过缓存
proxy_cache_bypass $http_upgrade;
#用于避免缓存特定响应
# proxy_no_cache
}
}
}
配置 nginx 代理服务后
不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值。
设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。
设置 proxy_set_header Host h o s t : host:host:proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 h o s t : host:host:proxy_port 的值。
设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口。
设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404。
开启的服务内容
//服务一
import http from 'http'
import fs from 'fs'
const server = http.createServer((req,res)=>{
if(req.url == '/'){
fs.readFile('./src/index.html',(err,data)=>{
res.end(data)
})
}
})
server.listen(3001,()=>{
console.log(`项目启动在http://localhost:3002端口上`)
})
//服务二
import http from 'http'
import fs from 'fs'
const server = http.createServer((req,res)=>{
if(req.url == '/'){
fs.readFile('./src/index.html',(err,data)=>{
res.end(data)
})
}
})
server.listen(3002,()=>{
console.log(`项目启动在http://localhost:3001端口上`)
})