前端Nginx学习笔记

nginx简介

1.nginx是一个高性能的Web服务器和反向代理服务器,也可做为电子邮件代理服务器。
2.在链接高并发的状况下,nginx是Apache服务不错的替代品,可以支持高达 50,000 个并发链接数的响应。php

正向代理与反向代理

1.反向代理是指以代理服务器来接受Internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回到Internet上请求链接的客户端,此时代理服务器对外表现为一个反向代理服务器。
2.正向代理是指用户没法访问某网站,可是能够访问某代理服务器,而代理服务器能够访问该网站。因而用户经过访问代理服务器去访问该网站,代理服务器把响应信息返回给用户。
3.反向代理中用户访问的IP和端口是nginx服务器的,不知道提供服务的底层服务器,底层服务器在内网中,对外公开的是nginx服务器,nginx充当中间层。而正向代理中用户是知道目标服务器的域名信息的,知只是迫于网络的限制没法访问,如最多见的访问外网。css

nginx安装与启动

nginx有windows版本和linux版本,通常针对项目需求是在Linux部署nginx服务器。html

下载地址

nginx.org/en/download…前端

windows版本下载一个压缩包,解压便可
1.文件路径必须为英文,不然启动不成功。
2.查看端口占用,nginx服务器默认启动80端口。 cmd中node

  • netstat -an  显示出电脑中全部被打开的端口列表
  • netstat -ano  显示出全部占用端口的列表
  • netstat -ano | findstr "80"  显示出80端口占用的详细状况
  • tasklist | findstr "80"    查询端口具体哪一个应用占用

Netstat是在内核中访问网络链接状态及其相关信息的程序,它能提供TCP链接,TCP和UDP监听,进程内存管理的相关报告。python

启动成功

  • 启动方式1:双击nginx.exe
  • 启动方式2:start nginx
  • 关闭方式1: 结束进程(两个进程)
  • 关闭方式2:nginx -s stop

nginx配置文件

nginx的核心配置文件nginx.conf主要由3个部分组成linux

  • 基本配置
#user nobody; #配置worker进程运行用户
worker_processes  1; #配置工做进程数目,根据硬件调整,一般等于CPU数量或者2倍于CPU数量

#error_log logs/error.log; #配置全局错误日志及类型 [debug|info|notice|warn|error|crit(致命错误)]默认error
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid; #配置进程pid文件

复制代码
  • events配置
#配置工做模式和链接数
events {
    # use epoll; #事件处理模型优化
    worker_connections  1024; #配置每一个worker进程链接数上限,nginx支持的总链接数等于worker_connections*worker_processes
    # 个人本双核四线程,多任务运行弱,CPU主频2.4GHz,运行缓慢
}
复制代码
  • http配置,基本配置和多个server配置
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日志及存放路径,并使用上面定义的main日志格式
    #access_log logs/access.log main;

    sendfile        on; #开启高效文件传输模式
    #tcp_nopush on; #防止网络阻塞

    #keepalive_timeout 0;
    keepalive_timeout  65; #长链接超时时间,单位是秒
    #gzip on; #开启gzip压缩输出

    #能够配置多个server
    server {
        listen       80; #配置监听端口
        server_name  localhost; #配置服务名

        #charset koi8-r; #配置字符集(俄罗斯字符集) 
        #access_log logs/host.access.log main;

        #默认的匹配斜杠/的请求,当访问路径中有/,会被该localtion匹配到并进行处理
        #nginx根目录 /html/index.html
        location / {
            root   html; #root根目录,nginx安装主目录下的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; #配置50x错误页面 html/50x.html
        #精确匹配
        location = /50x.html {
            root   html;
        }

        #PHP脚本请求所有转发道到Apache处理
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        # proxy_pass http://127.0.0.1;
        #}

        #PHP脚本请求所有转发道到FastCGI处理
        # 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;
        #}
        
        # 禁止访问.htaccess文件-一般是禁止外网访问的文件
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        # deny all;
        #}
    }

    # 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服务,安全的网络传输协议,加密传输,端口443
    # 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;
    # }
    #}

}
复制代码

nginx的主要应用

1.静态网站

nginx是一个http的web服务器,能够将服务器上的静态文件(html、图片等)经过http协议返回给浏览器客户端;若不配置location,nginx默认查找根目录html中的index.html文件。nginx

server {
        listen       8080;
        server_name  localhost;
        location / {
	    root   wangyi/static; #root= ip+端口 
            index  index.html index.htm;
        }
        #访问:localhost:8080,或以下配置
         location /static {  
	    root   wangyi;  #注意分号
            index  index.html index.htm;
        }
        #访问:localhost:8080或localhost:8080/static
        .......
    }
复制代码

2.负载均衡

网站服务器由多台服务器组成一个集群对外提供服务,当用户输入域名进行访问的时候,负载均衡负责将用户请求分发到集群中的不一样服务器,从而提升并发处理能力。nginx做为访问的统一入口,分发请求,实现负载均衡。 负载均衡实现方式有硬件负载均衡和软件负载均衡。web

nginx负载均衡

nginx经过在nginx.conf配置文件中配置实现负载均衡 1.首先在http模块配置windows

upstream network1{
    server 127.0.0.1:3000 weight=3; #权重
    server 127.0.0.1:5000 weight=1; 
}
复制代码

weight表示权重,用于后端服务器性能不均的状况,访问比率约等于权重之比,权重越大,被访问的概率越大。 upstream是配置nginx与后端服务器负载均衡很是重要的一个模块,他还能对后端服务器的健康状态进行检查,若后端服务器中有一台发生故障,则前端请求不会转发到该故障机器。 2.而后在server模块里配置

localtion /webname{
    proxy_pass http://network1; 
}
复制代码

参数‘http://’是固定的,network1字符串要和upstream后面的字符串相等。代理转发到network1下,而后去匹配upstream,再去匹配upstream下的server。

node.js建立http服务器实现负载均衡

node http服务建立好之后,nginx 配置好之后,node做为代理服务器就能够访问node服务了。

upstream network1 {
        server 127.0.0.1:3000 weight=3;
	server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:6000 weight=1;
    }

    server {
        listen       8080;
        server_name  localhost;

        location / {
            # 访问不到服务器,作详细配置。
	    #proxy_redirect off; 
            #proxy_set_header X-Real-IP $remote_addr; 
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            #proxy_set_header X-Forwarded-Proto $scheme; 
            #proxy_set_header Host $http_host; 
            #proxy_set_header X-NginX-Proxy true; 
            #proxy_set_header Connection ""; 
            #proxy_http_version 1.1; 
           proxy_pass http://network1;
        }
复制代码
const http = require('http')
const fs = require('fs')
const url = require('url')
http
    .createServer((req, res) => {
        if(req.url == '/favicon.ico'){
            res.writeHead(200);
            res.end()   
            return;
        }
        res.writeHead(200);
        fs.createReadStream(__dirname + '/index.html') #不一样的页面内容查看效果
        .pipe(res);
    })
    .listen(5000)  #3000、6000。。。
------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>node</title>
   <link rel="stylesheet" href="">
</head>
<body>
    <div>第 1 个node服务器</div>
    <!-- <div>第 2 个node服务器</div> -->	
    <!-- <div>第 3 个node服务器</div> -->				
</body>
</html>
复制代码

nginx能够成功访问服务器,访问比大约等于权重之比。

nginx经常使用负载均衡策略
  • 1.轮询(默认)

每一个请求轮流分配到不一样的后端服务器,若是后端服务器宕机,则自动剔除。具体轮询策略为第一次访问第一个,第二次访问第二个。。。。。

upstream network1 {
        server 127.0.0.1:3000;
	    server 127.0.0.1:5000;
        server 127.0.0.1:6000;
    }
复制代码
  • 2.权重

每一个请求按照必定比例分发到不一样的后端服务器,用于后端服务器性能不均的状况,访问比率约等于权重之比,权重越大,被访问的概率越大。

upstream network1 {
        server 127.0.0.1:3000 weight=3;
	    server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:6000 weight=1;
    }
复制代码
  • 3.ip_hash

ip_hash也叫ip绑定,每一个请求按照访问ip的哈希值分配,这样每一个访问客户端会固定访问一个后端服务器,能够解决会话session丢失的问题,常见帐号密码登陆。 哈希函数hash("192.168.0.164")%2 = 0 / 1,ip不变的话访问的服务器不变。

upstream network1 {
       ip_hash;
       server 127.0.0.1:3000;
       server 127.0.0.1:5000;
       server 127.0.0.1:6000;
   }
复制代码

当使用ip_hash之后,会一直访问3000端口的第一台服务器。

  • 最少链接 web请求会被转发到链接数最少的服务器上。
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	    server 127.0.0.1:5000;
        server 127.0.0.1:6000;
    }
复制代码
负载均衡其余配置
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	server 127.0.0.1:5000 backup; #备份 当全部非backup机器宕机的时候才能请求backup机器。
    }
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	server 127.0.0.1:5000 down;#当前机器是down状态,不参与负载均衡。
    } 
复制代码

3.静态代理

把全部静态资源的访问改成访问nginx,而不是后台服务器,nginx更擅长于静态资源的处理,性能更好,效率更高。在实际应用中将静态资源html,css,js,图片交给nginx处理。 nginx实现静态代理,在nginx.conf配置文件中添加静态资源的location。
1.基于请求资源的后缀

location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
    &emsp;root/html; #访问静态资源的路径,静态资源部署在nginx安装目录下,跟访问html/index.html一个道理。
}
复制代码

2.基于请求资源的存放目录

location ~ .*/(js|css|img|imgags)${
    &emsp;root/opt/static
}
复制代码

linux安装目录:/user/local/nginx,在linux做为nginx部署服务器时,请求linux中存放静态资源的某个目录,如/opt/static

4.动静分离

nginx的负载均衡和静态代理结合在一块儿,实现动静分离,服务器专一于动态资源,nginx专一于静态资源。

5.虚拟主机

虚拟主机就是把一台物理服务器划分红多个“虚拟”的服务器,这样咱们的一台物理服务器就能够当作多个服务器来使用,从而能够配置多个网站。 Nginx下,一个server标签就是一个虚拟主机,设置多个虚拟主机,配置多个server便可。

基于端口的虚拟主机

根据nginx的不一样端口便可访问到基于不一样端口的服务器。

server {
        listen       8080; #9090。。。
        server_name  localhost;
        location / {
		  proxy_pass http://network1;
        }
 }
 upstream network1 {
        server 127.0.0.1:3000;
    }
 upstream network2 {
        server 127.0.0.1:5000;
    }
复制代码
基于域名的虚拟主机

基于域名的虚拟主机访问时以域名的形式访问,这就涉及到DNS域名解析的知识,咱们能够在windows的hosts文件给域名直接指定端口,windows C:\Windows\System32\drivers\etc有个hosts文件,若是在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。

server {
        listen       8080;
        server_name  www.maanshan.com
        # server_name www.laioyang.com
        location / {
		  proxy_pass http://network1;
          #proxy_pass http://network2;
        }
 }
复制代码
upstream network1 {
        server 127.0.0.1:3000;
    }
 upstream network2 {
        server 127.0.0.1:5000;
    }
复制代码
虚拟主机实例

www.meituan.com

  • www.liaoyang.meituan.com
  • www.maanshan.meituan.com

相关文章
相关标签/搜索