简介
Nginx(engine X)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.
特点是占用内存少,并发能力强.
主要功能有三个,反向代理,负载均衡和动静分离
正向代理和反向代理
正向代理:
意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
负载均衡
Nginx提供的负载均衡策略有两种,内置策略和扩展策略
内置策略为轮询,加权轮询,IPhash.扩展策略过多,不作详解.
轮询顾名思义就是按照特定顺序一个一个询问.
加权轮询就是在轮询的基础上按照服务器本身性能来进行额外分配并发压力.保证性能最大化利用.
IPhash是对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip请求分发给同一台服务器进行处理,可以解决多服务器时session不共享的问题.
另外还可以使用Nginx来进行动静分离
在开发过程中,有些请求时需要后台处理的,有些请求不需要进行后台处理(例如css,html等文件),哲学不需要经过后台处理的文件称为静态文件.让动态网站里的动态页面根据一定规则把不变的资源和经常变的资源区分开,动静资源做好拆分之后,我们就可以根据静态资源的特点将其做好缓存操作,提高资源响应的速度.
linux安装运行nginx
我这里直接使用的宝塔安装nginx,宝塔安装默认地址在/www/server/nginx/sbin目录下.使用./nginx启动,但是我这边却一直进入到nginx的欢迎页面.所以直接手动安装:
1.检查是否已安装nginx
find -name nginx
如果系统已安装nginx,那么卸载:
yum remove nginx
2.安装需准备的一些lib库
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl–devel
3.安装:
首先进入/usr/local目录
cd /usr/local
官网下载nginx 这里是nginx-1.12.1.tar.gz
wget -c http://nginx.org/download/nginx-1.12.1.tar.gz
解压
tar -zxvf nginx-1.12.1.tar.gz
进入该目录
cd nginx-1.12.1
配置、安装
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre --with-http_ssl_module
make
make install
输入whereis nginx就会显示安装后的地址了: /usr/local/nginx
cd进去打开conf配置目录就可以看到配置文件了:
cat查看以下可以发现配置文件中一直在监听80端口,确认阿里安全组和宝塔防火墙开放80端口后就可以直接使用公网ip访问:
Nginx常用命令
首先cd到安装目录
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
-s代表在当前目录下执行文件
Nginx配置文件详解及使用
首先是配置文件:
#===================全局块开始======================
#user nobody;
#工作进程数,一般配置成和cpu数量一致
worker_processes 1;
#全局错误日志及pid文件存放位置
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#nginx 启动master进程pid号
#pid logs/nginx.pid;
#=================全局块结束============================
#==============events块开始======================
events {
#标识单个worker进程的最大并发数
worker_connections 1024;
}
#============events块结束============================
#============http块开始(nginx服务器中配置最频繁的部分,配置虚拟主机,监听端口,请求转发等等)==========================
http {
#引入 mime 类型定义文件
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压缩
#gzip on;
#此处配置多台tomcat服务器(名称不能有下划线:webServer)
upstream webServer{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
upstream XXX {
server 127.0.0.1:8080 weight=2 #可以配置权重(weight),权重多的服务器多承担一些并发
server 127.0.0.1:8081 weight=1
}
#此处配置多台tomcat服务器(名称不能有下划线:webs2Server)
#upstream webs2Server{
#server 192.168.30.19:8083;
#server 192.168.32.12:8085;
#}
server {
#定义当前这个server监听的端口
listen 80;
#定义使用localhost访问
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#默认请求地址,如果请求是:192.168.10.80:80/ 那么会进入这个里面的tomcat反向代理地址
#一个location里面只能有一个proxy_pass
location / {
#此处可以配置Tomcat反向代理地址比如:
#此处可以引用上面upstream 的多台tomcat;也可以单独配置一台
proxy_pass http://127.0.0.1:8081/; #配置单台
#proxy_pass http://webServer/; #引用上面的多台
#引用上面的多台配置
# root html; #默认的网站根目录的位置
#index index.html index.htm; #网站的欢迎页,起始页
}
#表示如果请求是:192.168.10.80:80/web 那么会进入这个里面的tomcat反向代理地址
location /web {
#此处引用上面的配置的多台tomcat
#proxy_pass http://127.0.0.1:8082/;
#proxy_pass http://web2Server/; #引用上面的多台Tomcat配置
}
#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;
}
}
个人总结就是,首先过来一个特定路径的请求,比如默认或者/web之类,然后进入指定server{}进行代理,为期代理分配默认的index或者404页面,并为代理指定的proxy_pass(代理通行证),指定这个请求去哪一个或者多个服务器(多个服务器默认使用轮询)
如果的确有多个服务器可供选择,还可以为这些服务器指定权重,进行并发压力分配
实例整合
原本项目中的api地址是
VUE_APP_BASE_API = ‘http://localhost:8001’
现在将8001修改为9001
现在修改nginx的配置文件,修改一下请求转发的listen监听目录为想要监听的端口号,如下:
server {
listen 9001; //需要监听的目录
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ /eduservice/ {
proxy_pass http://localhost:8001;
}
}
这样如果监听到9001端口的请求访问路径中含有/eduservice/,就将请求转发到8001的端口上.
修改完配置记得重启服务