Nginx 部署、反向代理配置、负载均衡

最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍。

为什么选择Nginx

  • 轻:相比于Apache,同样的web服务器占用的资源少
  • 多线程模式:Nginx拥有多个worker进程,处理请求时是异步非阻塞的
  • 社区活跃
  • 可以做反向代理
  • 支持7层负载均衡。什么是七层负载均衡
  • 配置简单,易上手。这才是我们选择的主要原因。

上一个官方下载下来的文档

链接:https://pan.baidu.com/s/1bkbGk8bcZcqe6sVG843WHA

提取码:eg59

Window下 的 Nginx

虽然一般的服务器都不使用windows系统,我们还是先来一段window的

  • 访问 ngix下载页下载windows 版本的 ngix压缩包
  • 解压到相应的目录下。
  • 打开CMD, cd到解压ngix的目录下,键入 start nginx.exe
  • 打开浏览器,输入localhost/127.0.0.1
  • 上图:

  • 常用命令:
  1. nginx -s stop #停止nginx
  2. nginx -s reload #重新加载nginx配置
  3. nginx -s reopen #重新启动
  4. nginx -s quit #退出nginx

Linux(CentOS) 下的 Nginx

下面是我们真正使用的Linux 下 搭建Nginx,演示时我使用的WM Ware创建的虚拟机。使用putty进行远程连接。注:如果使用服务器操作的话,粘贴可就麻烦了,所以还是用远程连接吧,能直接copy paste命令

菜鸟教程的方法

直接上链接。Nginx安装

官方文档上的方法

  • cd 到 yum的资源目录下
  1. cd /etc/yum.repos.d/
  • 创建一个文件:nginx.repo,
  1. vi nginx.repo
  2. # 内容
  3. [nginx]
  4. name=nginx repo
  5. baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
  6. gpgcheck=0
  7. enabled=1
  8. # 文档上的url是http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
  9. # 替换成你的 os 与 版本
  10. # 保存退出
  • 键入如下一系列命令
  1. yum -y install nginx # 安装
  2. systemctl enable nginx #开机自启
  3. systemctl start nginx #启动nginx
  4. firewall-cmd --permanent --zone=public --add-port=80/tcp #永久开启80端口
  5. firewall-cmd --reload #重新加载防火墙
  • 下面我们回到物理机,测试一下虚拟机上的Nginx 服务是否安装成功。在物理机打开浏览器,键入:虚拟机IP:80,上图:

  • 常用命令与Windows相同。
  • 个人建议使用官方上的配置。

说明Angular 项目的打包,并部署到虚拟机的Nginx

  • 在本地找了一个angular项目目录下 ng-build,会生一个dist文件夹
  • 键入如下命令:nginx -t
  1. nginx -t #查看配置文件路径
  2. #结果
  3. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  4. nginx: configuration file /etc/nginx/nginx.conf test is successful
  1. #查看上述路径的文件
  2. user nginx;
  3. worker_processes 1;
  4. error_log /var/log/nginx/error.log warn;
  5. pid /var/run/nginx.pid;
  6. events {
  7. worker_connections 1024;
  8. }
  9. http {
  10. include /etc/nginx/mime.types;
  11. default_type application/octet-stream;
  12. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  13. '$status $body_bytes_sent "$http_referer" '
  14. '"$http_user_agent" "$http_x_forwarded_for"';
  15. access_log /var/log/nginx/access.log main;
  16. sendfile on;
  17. #tcp_nopush on;
  18. keepalive_timeout 65;
  19. #gzip on;
  20. include /etc/nginx/conf.d/*.conf;
  21. }
  • 注意上面最后一句话包含conf.d文件夹下的所有.conf。我们再那个文件夹下找到了default.conf ,编辑default.conf
  1. server {
  2. listen 80;
  3. server_name localhost;
  4. location / {
  5. #root /usr/share/nginx/html;
  6. root /usr/share/nginx/html/dist/demo;
  7. #更改成我们上传的目录一定要写到有index.html那一级
  8. index index.html index.htm;
  9. }
  10. error_page 500 502 503 504 /50x.html;
  11. location = /50x.html {
  12. root /usr/share/nginx/html;
  13. }
  14. }
  • 重新载入Nginx配置
  1. nginx -s reload
  • 上对比图

配置一个简单的反向代理

前端需要调用后端的Rest API,我们需要将一部分请求配置反向代理。

  • 直接上conf配置
  1. server {
  2. listen 80;
  3. server_name localhost;
  4. location / {
  5. root /usr/share/nginx/html/dist/demo;
  6. index index.html index.htm;
  7. }
  8. error_page 500 502 503 504 /50x.html;
  9. location = /50x.html {
  10. root /usr/share/nginx/html;
  11. }
  12. # 匹配到/proxy/这个url的时候代理到220.181.112.244 百度这个服务器
  13. location ^~ /proxy/ {
  14. proxy_set_header Host 220.181.112.244;
  15. proxy_set_header X-Real-IP 220.181.112.244;
  16. proxy_pass http://220.181.112.244/proxy/;
  17. proxy_http_version 1.1;
  18. proxy_set_header Connection "";
  19. }
  20. }
  • 在重新载入配置前,我们先尝试一下,上图:

注:本地项目,没有配置路由,所有会没有proxy这个东西,会报404错误,我们可以通过查看当前404是哪个服务器包的错,来判断是否发生反向代理

从图中可以看出,此时没有进行反向代理,在虚拟机的服务器上提示404

注:这里说明一点,就是即便发生了法相贷,但是network中的显示还是我的虚拟机的ip,所以不能当做是否发生反向代理的标注

  • 重新载入Nginx配置
  1. nginx -s reload
  • 刷新刚才的页面,上图:可以发现,已经代理到百度的错误页面上去了。

  • 一个简单的反向代理就配置好了。

nginx 负载均衡

注:20190220更新

  • 准备工作
  1. 1.一台虚拟机
  2. 2.虚拟机安装docker
  • 如上面操作在虚拟机上搭载一个Nginx服务器
  • 使用docker 拉取nginx 镜像
  1. docker pull nginx
  • 运行两个nginx的容器
  1. docker run --name nginx-test-1 -d -p 8888:80 nginx /bin/bash
  2. docker run --name nginx-test-2 -d -p 8889:80 nginx /bin/bash
  • 分别进入到两个容器中,更改其中nginx web目下的index.html
  1. docker exec -it nginx-test-1 /bin/bash
  2. 内容改成 this is nginx1
  3. docker exec -it nginx-test-2 /bin/bash
  4. 内容改成 this is nginx2
  • 退回到虚拟机中,更改虚拟机的nginx conf文件
  1. server{
  2. location / {
  3. root /usr/share/nginx/html;
  4. index index.html index.htm;
  5. proxy_pass http://balance; #balance 是下面upstream后定义的名字
  6. }
  7. }
  8. # 在server{}外面增加如下代码
  9. upstream balance {
  10. server localhost:8888 weight=1;
  11. server localhost:8889 weight=1;
  12. }
  • 在本机访问localhost
  1. curl localhost
  2. #
  3. 会发现this is nginx1 this is nginx2交替出现

Nginx 部署、反向代理配置、负载均衡的更多相关文章

  1. nginx的反向代理和负载均衡的一个总结

    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...

  2. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  3. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  4. nginx实现反向代理和负载均衡

    利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...

  5. nginx的反向代理和负载均衡的区别是什么 - 开源中国社区

    nginx的反向代理和负载均衡的区别是什么 - 开源中国社区   nginx的反向代理和负载均衡的区别是什么 #user  nobody;worker_processes  1;#error_log  ...

  6. 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现

    CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...

  7. Nginx使用反向代理实现负载均衡

    Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...

  8. 转载:Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理

    转载自:https://blog.51cto.com/wjw7702/1150225 一.概述 如今利用nginx做反向代理和负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文 ...

  9. [转]Nginx介绍-反向代理、负载均衡

    原文:https://www.cnblogs.com/wcwnina/p/8728391.html 作者:失恋的蔷薇 1. Nginx的产生 没有听过Nginx?那么一定听过它的"同行&qu ...

  10. nginx 作为反向代理实现负载均衡的例子

    以下我们就来举例说明如何使用 nginx 实现负载均衡.因为nginx在处理并发方面的优势,现在这个应用非常常见.nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作 ...

随机推荐

  1. AES加解密算法

    直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中. php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被 ...

  2. Dubbo监控中心

    (1).dubbo-admin(管理控制台) 1).从https://github.com/apache/incubator-dubbo-ops下载解压 2).修改dubbo-admin配置文件中zo ...

  3. WEBSHELL恶意代码批量提取清除工具

    场景 使用D盾扫描到WEBSHELL后可以导出有路径的文本文件. 最后手动去把WEBSHELL复制到桌面然后以文件路径命名,挨个删除. D盾界面是这样的. 手动一个个找WEBSHELL并且改名效率太低 ...

  4. MySQL— pymysql and SQLAlchemy

    目录 一.pymysql 二.SQLAlchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1. 下载安装 #在终端直接运行 pip ...

  5. dup,dup2函数【转】

    转自:http://eriol.iteye.com/blog/1180624 转自:http://www.cnblogs.com/jht/archive/2006/04/04/366086.html ...

  6. #ifndef详解

    #ifndef 是"if not defined"的简写,是预处理功能(宏定义.文件包含.条件编译)当中的条件编译,可以根据是否已经定义了一个变量来进行分支选择,其作用是: 1.防 ...

  7. nagios监控客户端报错/usr/bin/perl^M: bad interpreter: No such file or directory

    nagios服务端监控客户端内存时发现监控不上 在客户端直接执行脚本,报错如下: # /usr/local/nagios/libexec/check_memory.pl -w 6% -c 3% -ba ...

  8. centos下httpd-2.4的编译安装

    httpd-2.4编译安装     依赖于更高版本的apr和apr-util      apr 全称  apache portable runtime 首先停用低版本的httpd服务 service ...

  9. Springboot分模块开发

    这是个spring cloud项目,service-base:基础服务:service-config:配置中心:service-entity:实体类: service-gateway:服务网关:ser ...

  10. 同时装了Python3和Python2,怎么用pip

    作者:匿名用户链接:https://www.zhihu.com/question/21653286/answer/95532074来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...