nginx反向代理、负载均衡配置及vue项目部署

一.nginx配置文件结构

			Nginx的配置文件是一个纯文本文件。整个配置文件以block形式组织。每个block以一个大括号“{”来表示。block可分为几个层次,整个配置文件中Main命令位于最高层,在Main层下面可以有Events、 HTTP等层级,而在HTTP层中又包含Server层,即server block,

在这里插入图片描述

二.Nginx 服务的基本配置项详解

			nginx.conf配置文件主要分成四个部分:
				main (全局设置) 。		
				sever (主机设置)。
				upstram负载均街服务器设置。
				location(URL匹配特定位置的设置)。
				
				main部分设置的命令将影响其他所有设置。 server 部分的命令主要用于指定主机和端口;。upstream命令主要用于负载均衡,设置一系列的后端服务器。 location 部分用于匹配网页位置。这四者之间的关系式server继承main, location 继承server, upstream 既不会继承其他设置也不会被继承。
				
				在这四个部分当中,每个部分都包含若干命令,这些命令主要包含Nginx的主模块命令,事件模块命令,HTTP核心模块命令,同时每个部分还可以使用其他HTTP模块命令(例如HTTP SSL模块,HttpGzip Static模块和Http Addition模块等)。
				eg;
				#user  nobody;                                   
				worker_processes  1;				
				#error_log  logs/error.log;
				#error_log  logs/error.log  notice;
				#error_log  logs/error.log  info;		
				#pid        logs/nginx.pid;
				events {
				    use epoll;
				    worker_connections  1024;
				}	
				/*
				  以上这块配置代码是对nginx全局属性的配置。
				  user :主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行。
				  worker processes: 指定Nginx要开启的进程数。
				  error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit输出日志最少。
				  pid: 用来指定进程id的存储文件位置。
				  event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选。
				         worker_connection是设置nginx每个进程最大的连接数,默认是1024,所以nginx最大的连接数max_client=worker_processes * worker_connections。进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit。
				*/		
				#下面部分是nginx对http服务器相关属性的设置
				http {
				    include       mime.types;               主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主配置文件的简洁
				    default_type  application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。 
				
				    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   指定nginx日志的格式
				    #                  '$status $body_bytes_sent "$http_referer" '
				    #                  '"$http_user_agent" "$http_x_forwarded_for"';
				
				    #access_log  logs/access.log  main;
				
				    sendfile        on;   开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。
				    #tcp_nopush     on;	
				    #keepalive_timeout  0;   客户端连接超时时间
				    keepalive_timeout  65;
				
				    #gzip  on;             设置是否开启gzip模块
				
				    #server段是虚拟主机的配置 这里可以写在别的文件中 然后在包含进来,比如写在/usr/local/nginx/vhost/xxx.conf 目录某文件中 然后在包含进来,可以包含多个文件 include /usr/local/nginx/vhost/*;
				    server {
				        listen       80;   虚拟主机的服务端口
				        server_name  localhost;   用来指定ip或者域名,多个域名用逗号分开		
				        #charset koi8-r;
				        #access_log  logs/host.access.log  main;
				        location / {                       地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理
				            root   html;                   虚拟主机的网页根目录
				            index  index.html index.htm;   默认访问首页文件
				        }
				
				        #error_page  404              /404.html;
				
				        # redirect server error pages to the static page /50x.html
				        #
				        error_page   500 502 503 504  /50x.html;
				        location = /50x.html {
				            root   html;
				        }
				
				        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
				        #
				        location ~ \.php$ {   将以php为后缀的文件转发到 FastCGI处理. 使用FastCGI默认配置。本地8088端口处理
				            fastcgi_pass   http://127.0.0.1:8088;
				              fastcgi_index index.php;
				              fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
				              include        fastcgi_params;
				        }
				        #静态文件,nginx自己处理
				        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
				             root /var/www/public/images;       
				             expires 30d;  #缓存时间30天,静态文件更新不多,过期时间可以设大一点。
				        }
				       #配置Nginx状态的地址
				        location /NginxStatus {
				          stub_status            on;
				          access_log              on;
				          auth_basic              "NginxStatus";
				          auth_basic_user_file  conf/htpasswd;
				        }
				
				       #配置nginx负载均衡的服务器列表
				       upstream mysvr {
				          #weigth参数表示权值,权值越高被分配到的几率越大
				          #本机上的Squid开启3128端口
				          server 192.168.199.1:88 weight=5;
				          server 192.168.199.1:80   weight=1;
				
				        }
				        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
				        #
				        #location ~ \.php$ {              
				        #    root           html;
				        #    fastcgi_pass   127.0.0.1:9000;
				        #    fastcgi_index  index.php;
				        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
				        #    include        fastcgi_params;
				        #}
				
				        # deny access to .htaccess files, if Apache's document root
				        # concurs with nginx's one
				        #
				        #location ~ /\.ht {
				        #    deny  all;
				        #}
				    }
				}

三.配置完成后,实例验证

在这里插入图片描述
在配置文件中添加proxy_pass配置,修改server_name后面的值为_,保存,重启nginx,浏览器打开输入服务器ip就会跳转到到百度首页。这就是反向代理实现。

四.负载均衡配置

在这里插入图片描述
默认是轮询策略,即将请求平分到每台服务器

五.部署vue项目

将打包好的vue的dist目录复制到/home/myblog目录下
打开配置文件nginx.conf,修改配置:
在这里插入图片描述
保存退出,重启nginx,在浏览器用服务器ip或者绑定的域名访问即可。

六.Nginx端口转发

    1.什么是端口转发?
		       假如我们在服务器上搭建一个图书和一个电影的应用,其中图书启动 8001 端口,电影启动 8002 端口。此时如果我们可以通过
		
		localhost:8001    //图书
		localhost:8002    //电影
		
		访问。但要实现访问应用时不加端口就能访问域名,即两个应用都通过 80 端口访问。如何实现?
		一个常用的方法是用 Nginx 进行端口转发。
		Nginx 的实现原理是:用 Nginx 监听 80 端口,当有 HTTP 请求到来时,将 HTTP 请求的 HOST 等信息与其配置文件进行匹配并转发给对应的应用。
		例如当用户访问 book.douban.com 时,Nginx 从配置文件中知道这个是图书应用的 HTTP 请求,于是将此请求转发给 8001 端口的应用处理。当用户访问 movie.douban.com 时,Nginx 从配置文件中知道这个是电影应用的 HTTP 请求,于是将此请求转发给 8002 端口的应用处理。一个简单的 Nginx 配置文件(部分)如下面所示:
		 
		#user  nobody;
		worker_processes  1;
		 
		#error_log  logs/error.log;
		#error_log  logs/error.log  notice;
		#error_log  logs/error.log  info;
		 
		#pid        logs/nginx.pid;

		events {
		    worker_connections  1024;
		}

		http {
		    include       mime.types;
		    default_type  application/octet-stream;
		 
		    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
		    #                  '$status $body_bytes_sent "$http_referer" '
		    #                  '"$http_user_agent" "$http_x_forwarded_for"';
		 
		    #access_log  logs/access.log  main;
		 
		    sendfile        on;
		    #tcp_nopush     on;
		 
		    #keepalive_timeout  0;
		    keepalive_timeout  65;
		 
		    #gzip  on;
		 
		 
		    upstream bigdata{
		        server 127.0.0.1:81;
		    }
		    #Demo2负载均衡池
		   upstream ztth{
		        server 127.0.0.1:82;
		    }
		 
		     upstream pdf{
		        server 127.0.0.1:83;
		    }
		 
		#Demo1端口转发
		server {
		    listen       80;
		    server_name  *.baidu.com;
		    access_log logs/book.log;
		    error_log logs/book.error;
		    
		    #将所有请求转发给demo_pool池的应用处理
		    location / {
		        proxy_set_header Host $host;
		        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		        proxy_pass http://bigdata;
		    }
		}
		#Demo2端口转发
		server {
		    listen       80;
		    server_name  demo.baidu.com;
		    access_log logs/movie.log;
		    error_log logs/movie.error;
		    
		    #将所有请求转发给demo_pool池的应用处理
		    location / {
		        proxy_set_header Host $host;
		        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		        proxy_pass http://ztth;
		    }
		}
		server {
		    listen       80;
		    server_name  pdf.baidu.com;
		    access_log logs/movie.log;
		    error_log logs/movie.error;
		    
		    #将所有请求转发给demo_pool池的应用处理
		    location / {
		        proxy_set_header Host $host;
		        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		        proxy_pass http://pdf;
		    }
		}
		#该baidu.ynntwl.com重定向到百度
		server {
		    listen       80;
		    server_name  baidu.ynntwl.com;
		    access_log logs/movie.log;
		    error_log logs/movie.error;
		    
		    #将所有请求转发给demo_pool池的应用处理
		    location / {
		        proxy_set_header Host $host;
		        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		        #proxy_pass http://www.baidu.com;
				rewrite ^/(.*) http://www.baidu.com/$1 permanent;
		    }
		}
		    # another virtual host using mix of IP-, name-, and port-based configuration
		    #
		    #server {
		    #    listen       8000;
		    #    listen       somename:8080;
		    #    server_name  somename  alias  another.alias;
		 
		    #    location / {
		    #        root   html;
		    #        index  index.html index.htm;
		    #    }
		    #}
		 
		 
		    # HTTPS server
		    #
		    #server {
		    #    listen       443 ssl;
		    #    server_name  localhost;
		 
		    #    ssl_certificate      cert.pem;
		    #    ssl_certificate_key  cert.key;
		 
		    #    ssl_session_cache    shared:SSL:1m;
		    #    ssl_session_timeout  5m;
		 
		    #    ssl_ciphers  HIGH:!aNULL:!MD5;
		    #    ssl_prefer_server_ciphers  on;
		 
		    #    location / {
		    #        root   html;
		    #        index  index.html index.htm;
		    #    }
		    #}
		}
		上面这段配置实现了:
		1、当用户访问的域名是:http://book.chanshuyi.com 时,我们自动将其请求转发给端口号为 8001 的 Tomcat 应用处理。
		
		2、当用户访问的域名是:http://movie.chanshuyi.com 时,我们自动将其请求转发给端口号为 8002 的 Tomcat 应用处理。
		
		端口转发指的是由软件统一监听某个域名上的某个端口(一般是80端口),当访问服务器的域名和端口符合要求时,就按照配置转发给指定的 Tomcat 服务器处理
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值