服务器拆分方案
- web服务器:一般用来处理一些静态资源,如CSS、JS文件等
- data服务器:存放数据,以及用来处理一些业务请求,如各种业务接口
- 图片服务器:用来处理一些图片、视频的资源
负载均衡
参考:
https://www.cnblogs.com/muhy/p/10528338.html
https://www.jianshu.com/p/ab7cf5484e8f
简易图片服务器配置
配置步骤
1.在nginx.conf
文件的server中添加配置如下:
server {
...
location /images/ {
# 访问路径
alias g:/img/;
# 后面是本地存储图片的映射路径,最后面的/别漏了
autoindex on;
# 加上这行代表访问:http://127.0.0.1/images/时允许显示图片列表
}
...
}
2.在命令行输入命令:nginx -s reload
,重启nginx服务器
3.访问:http://127.0.0.1/images/1.jpg,则会访问到该目录下的1.jpg
图片;访问:http://127.0.0.1/images/,则可以看到该目录下的图片列表
参考:
https://blog.csdn.net/qq_23974323/article/details/80067250
协议相关
HTTPS配置
- 生成证书密钥,证书生成命令如下:
openssl req -x509 -newkey rsa:2048 -nodes -sha256 -keyout privkey.pem -out cert.pem
执行成功后将生成privkey.pem
和cert.pem
文件,这个是我们自己生成的证书,到时候访问https页面将会有不安全提示。如果想提示安全,可以去certbot、阿里云之类的签发机构获取免费签发的证书
- nginx配置如下:
server {
listen 443 ssl;
# 改为监听443端口,并配置ssl
server_name localhost;
ssl_certificate_key certs/privkey.pem;
ssl_certificate certs/cert.pem;
# 配置证书密钥,路径是conf下的相对路径
location / {
proxy_pass http://127.0.0.1:5000; # 配置反向代理
proxy_set_header Host $host;
}
...
}
- 配置访问http自动跳转https:
server {
listen 80;
server_name 127.0.0.1;
return 302 https://$server_name$request_uri;
}
参考:https://10.linuxstory.net/deploy-lets-encrypt-ssl-certificate-with-certbot/
阿里云证书参考:https://blog.csdn.net/u012557538/article/details/80389071
HTTP2配置
只需要在https的配置基础上,把监听443端口的那一行修改如下:
listen 443 ssl http2;
举例:
server {
listen 443 ssl http2;
# 配置http2
server_name localhost;
client_max_body_size 10m;
http2_push_preload on;
# 配置支持推送
ssl_certificate_key certs/localhost-privkey.pem;
ssl_certificate certs/localhost-cert.pem;
}
后端相关
缓存配置
在对应location
下添加缓存配置即可,如配置不要缓存:
add_header Cache-Control no-store;
注:
在Nginx中配置的缓存是代理缓存,其和客户端http请求时配置的缓存不太一样:客户端配置的缓存是当前客户端第一次请求过后,只有当前客户端会增加的缓存,而其他客户端第一次请求时,还是没缓存的;代理缓存是当一个客户端向代理请求以后,以后任何客户端访问这个代理都有缓存
动静分离配置
即将动态请求和静态资源请求分开,举例:
location / {
# 动态请求走这里
proxy_pass http://server1; # 默认配置PC端页面反向代理
}
location /static/~(.*)(\.jpg|\.png|\.gif|\.jepg|\.css|\.js|\.css){
# 静态资源请求走这里
root html/dist/static/;
}
websocket支持配置
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream server1 {
server 127.0.0.1:8000;
}
server {
location / {
proxy_pass http://server1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
}
前端相关
移动端/PC端适配配置
如果希望用户通过移动端或PC端访问时分别展示两套不同的页面,可以在nginx里通过条件判断,进行不同的反向代理,举例:
server {
...
location / {
...
proxy_pass http://127.0.0.1:5000; # 默认配置PC端页面反向代理
if ( $http_user_agent ~* "(Android|iPhone|Windows Phone|UC|Kindle)" ){
proxy_pass http://127.0.0.1:8000; # 配置移动端页面反向代理
}
...
}
}
如果配置的是两套静态前端,那么可以根据条件判断改变root
目录来实现,举例:
server {
...
location / {
...
root html/pc; # pc端项目入口
index index.html;
if ( $http_user_agent ~* "(Android|iPhone|Windows Phone|UC|Kindle)" ){
root html/mobile; # 移动端项目入口
}
...
}
}
vue-router的history模式兼容配置
location / {
root html/xxx/;
try_files $uri $uri/ /index.html;
}
常用配置参考
常用模块参考
其他参考
错误参考
nginx: [error] OpenEvent("Global\ngx_reload_16944") failed (2: The system cannot find the file specified)
没有启动nginx
bind() to 0.0.0.0:443 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions
通过下面命令找出占用443端口的程序,关闭它:
netstat -aon|findstr "443"
网友评论