Ngix学习记录

一、简介

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,可以在分布式系统中提供负载均衡。

什么叫反向代理?
这里有一篇别人写的关于正向代理和反向代理的文章:
https://blog.youkuaiyun.com/qq_28602957/article/details/61615876

什么叫负载均衡?
很好理解。用户使用Web、APP、SDK,通过HTTP、TCP连接到系统。在分布式系统中,为了高并发、高可用,一般都是多个节点提供相同的服务。那么,第一个问题就是具体选择哪个节点来提供服务,如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。

二、Ngix实现负载均衡的几种方式

1、轮询
通俗易懂,就是轮流分配给机器,公平。

upstream backserver {
    server 192.168.0.14;
    server 192.168.0.15;
}

2、权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,我们可以把性能好的权重设置大一些。

upstream backserver {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=7;
}

3、哈希
前面两种方式有个缺陷,用户每次访问的服务器不能保证是同一个,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {
    server server1;
    server server2;
    fair;
}

5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}
<think>嗯,用户这次想了解Nginx部署的方法和相关指南。从对话历史看,用户之前可能接触过Kubernetes Ingress和Vue部署的场景,现在需要系统性的部署指导。 用户提供的四个引用源很有价值:[1]讲的是NGINX作为Ingress控制器的部署,[2][3][4]都集中在Vue项目的Nginx部署。虽然用户没有明确具体场景,但考虑到Vue部署的引用占多数,应该优先覆盖这个最常见用例。不过也要兼顾通用性,毕竟用户问的是“方法和指南”。 注意到引用[4]特别提到了维护建议和故障排查,这个对用户实际部署后的运维很有帮助,需要在回复中强调。另外所有引用都涉及HTTPS配置,看来安全部署是必备内容。 之前给出的示例结构很清晰,可以沿用:先分场景说明两种主流用途(Web服务和Ingress),然后重点展开Web服务部署的七步流程。特别要突出几个技术要点: - 配置文件的写法需要示例,比如root和try_files的经典结构 - 防火墙命令要区分Ubuntu和CentOS - Certbot的自动化续约必须包含,引用[2]强调了这点 用户可能是运维人员或开发者,回复要兼顾理论和实操。故障排查部分直接采用引用[4]的日志分析方案,用表格呈现错误码会更直观。最后补充的进阶建议里,Docker部署和负载均衡虽然没出现在引用里,但属于企业级部署的常见需求。 突然想到用户没提操作系统环境,但引用中出现了Linux和Windows命令。为保险起见,在“重启Nginx”步骤里应该同时给出两种系统的方案,就像引用[3]那样处理。另外所有命令行都要标注是否需要sudo权限。 </think>以下是基于引用内容的 **Nginx 部署方法与指南**,涵盖通用部署流程、前端项目(Vue)部署及 Kubernetes Ingress 部署三类场景,并附操作步骤和注意事项: --- ### **一、通用 Nginx 部署流程** 1. **安装 Nginx** ```bash # Ubuntu sudo apt update && sudo apt install nginx # CentOS sudo yum install epel-release && sudo yum install nginx ``` ```bash sudo systemctl start nginx # 启动服务 sudo systemctl enable nginx # 开机自启 ``` 2. **基础配置** - 配置文件路径:`/etc/nginx/nginx.conf` 或 `/etc/nginx/conf.d/*.conf` - 检查配置语法:`sudo nginx -t` - 重启服务:`sudo systemctl restart nginx` 3. **防火墙配置** ```bash sudo ufw allow 'Nginx Full' # Ubuntu (HTTP/HTTPS) sudo firewall-cmd --permanent --add-service={http,https} # CentOS sudo firewall-cmd --reload ``` --- ### **二、部署前端 Vue 项目** [^2][^3][^4] 1. **构建 Vue 项目** ```bash npm install -g @vue/cli # 安装 Vue CLI vue create my-project # 创建项目 cd my-project && npm run build # 生成静态文件(默认输出到 dist/) ``` 2. **Nginx 配置** ```nginx server { listen 80; server_name your-domain.com; # 替换为域名或 IP # 静态资源路径 root /var/www/vue-project/dist; # 替换为 dist 目录的实际路径 index index.html; # 路由支持:避免刷新后 404 location / { try_files $uri $uri/ /index.html; } } ``` 3. **部署与验证** ```bash sudo cp -r dist /var/www/vue-project # 复制构建文件 sudo chown -R nginx:nginx /var/www/vue-project # 赋权 sudo nginx -t && sudo systemctl restart nginx # 重启生效 ``` - **访问测试**:浏览器打开 `http://your-domain.com` - **日志排查**: ```bash tail -f /var/log/nginx/error.log # 错误日志 tail -f /var/log/nginx/access.log # 访问日志 ``` 4. **HTTPS 配置(可选)** ```bash # 安装 Certbot 获取免费 SSL 证书 sudo apt install certbot python3-certbot-nginx # Ubuntu sudo certbot --nginx -d your-domain.com # 自动配置 sudo certbot renew --dry-run # 测试自动续期 ``` --- ### **三、Nginx 作为 Kubernetes Ingress 控制器** [^1] 1. **安装 NGINX Ingress Controller** ```bash # 使用 Helm 安装 helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install ingress-nginx ingress-nginx/ingress-nginx ``` 2. **配置 Ingress 路由规则** ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: ingressClassName: nginx rules: - host: your-domain.com http: paths: - path: / pathType: Prefix backend: service: name: vue-service # 目标服务名称 port: number: 80 ``` 3. **验证** ```bash kubectl get ingress # 查看 Ingress 状态 kubectl describe ingress my-ingress # 检查事件日志 ``` --- ### **四、故障排查与维护** [^4] | **问题** | **解决方法** | |-----------------------|------------------------------------------| | **502 Bad Gateway** | 检查后端服务是否运行,端口是否匹配 | | **504 Timeout** | 调整 Nginx 代理超时时间(`proxy_read_timeout`) | | **403 Forbidden** | 检查文件路径权限 (`chown -R nginx:nginx /path`) | | **404 Not Found** | 确认 `root` 路径是否正确,文件是否存在 | | **路由刷新 404** | 添加 `try_files $uri $uri/ /index.html;` | **维护建议**: - 定期更新 Nginx 版本和安全补丁 - 监控日志:`tail -f /var/log/nginx/access.log` - 备份配置文件:`cp /etc/nginx/nginx.conf /backup/` --- ### **相关问题** 1. **Nginx 如何配置负载均衡?** 2. **如何为 Nginx 添加自定义错误页面(如 404)?** 3. **Kubernetes Ingress 如何启用 HTTPS?** 4. **如何优化 Nginx 以支持高并发场景?**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值