记录Nginx学习

2019-10-28  本文已影响0人  ccccaixiaohao

由于公司的服务器是windows环境,所以学习nginx的过程也是在windows中进行。

1.下载安装Nginx

安装成功后有欢迎页
image.png

2.Nginx的配置文件

nginx.conf文件的全部内容:
#user  nobody;  
 
#开启进程数 <=CPU数   
worker_processes  1;  
#错误日志保存位置  
#error_log  logs/error.log;  
#error_log  logs/error.log  notice;  
#error_log  logs/error.log  info;  
#进程号保存文件  
#pid        logs/nginx.pid;  
#每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024  
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压缩  
    #gzip  on;  
    server {  
        #监听端口,默认是80端口  
        listen       80;  
        #监听域名  
        server_name  localhost;  
        #charset koi8-r;  
        #nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式)  
        #access_log  logs/host.access.log  main;  
        #如果没有location更明确的匹配访问路径的话,访问请求都会被该location处理。  
        location / {  
            #root指定nginx的根目录为/usr/local/nginx/html  
            root   html;  
            #默认访问文件,欢迎页先去html目录下找index.html,如果找不到再去找index.htm  
            index  index.html index.htm;  
        }  
        #error_page  404              /404.html;  
        # redirect server error pages to the static page /50x.html  
        #  
        #错误页面及其返回地址,错误码为500、502、503、504都会返回50.html错误页面。  
        error_page   500 502 503 504  /50x.html;  
        #location后面是"="的话,说明是精确匹配  
        location = /50x.html {  
            root   html;  
        }  
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
        #  
        #location ~ \.php$ {  
        #    proxy_pass   http://127.0.0.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;  
        #}  
    }  
    # 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;  
    #    }  
    #}  
}  

3.Nginx的主要应用

a.静态网站
b.负载均衡
c.静态代理
d.动静分离
e.虚拟主机

a.静态网站

1.准备一个html


image.png

2.配置location


image.png
这里匹配的是/,在url输入127.0.0.1:8001就会访问到index.html
image.png

若写成test,即匹配roor/test,即c:/nginxTest/test

b.负载均衡

举例:
1.准备两个后台,我这边为9005和9006


image.png

2.在nginx配置


image.png
3.测试页面
image.png
image.png

其他方式:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}

2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.0.14 weight=8;
server 192.168.0.15 weight=10;
}

3、IP绑定 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;
}

c.静态代理

使用nginx来访问静态资源,可以加快资源加载速度和效率。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
1.准备一张图片


image.png

2.在nginx配置

server {
        listen 8005;
        server_name test1;
        
        location / {
             root   E:/nginxTest;
             index  index.html;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header Host $http_host;
             proxy_set_header X-NginX-Proxy true;
             proxy_redirect off;
        }
        
        location /img/ {
            alias E:/nginxTest/img/;
            expires 30d;
        }
        
    }

3.测试页面


image.png

d.动静分离

1.准备前端页面,且写好请求的ajax

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/jquery-3.0.0.js"></script>
<script>
    $(function () {

        $("#getInfo").on("click",function () {
            $.ajax({
                url: "/main/getHello",
                type: "get",
                contentType: "application/json",
                dataType: "json",
                success: function (res) {
                    console.log("???")
                    $("#test").html(res)
                }
            })
        })


    })
</script>
<body>
    <button id="getInfo">从后台获取</button>
    <p id="test">test</p>
</body>
</html>
image.png

2.写好后台,我后台端口为9005

@Controller
@RequestMapping("/main")
public class MainController {
    
    @RequestMapping(value="/getHello",method=RequestMethod.GET)
    @ResponseBody
    public String getHello() {
        System.out.println("getHello");
        return "this is from 9005";
    }

3.在nginx配置文件中,配置前端页面位置并将ajax的请求转发到9005


image.png

4.页面测试


image.png

e.虚拟主机

image.png

基于不同端口的演示:
1.nginx的配置


image.png

2.测试页


image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读