[技术探索]Nginx配置

nginx配置文件

打开 nginx. conf 配置文件,从整体结构可以看出,该配置文件主要由以下几部分组成,主要的配置都在service和loaction中, 并且对于嵌套块(如 http、 server、 location)中的指令,执行的顺序为从外到内依次执行,内层块中的大部分指令会自动 获取外层块指令的值作为默认值

main
events {...}
http {
    server {
        location {...}
    }
}

静态资源代理

server{
  listen  80
  server_name www.myblog.com
  location / {
       root /opt/html/;
       index  index.html index.htm;
  }
}

www.myblog.com/index.html会到/opt/html下查找index.html静态资源

关键字root和alias的区别

root意思就是根据root路径+locationn路径找到资源;alias意思就是用alias路径替换对应的location路径内容。

#root配置
#IP_Address/images/tmp.jpg   =   /usr/local/static/images/tmp.jpg

location /images/ {
     root  /usr/local/static/
}

#alias配置  
#IP_Address/images/1.jpg   =   /usr/local/static/images/tmp.jpg
location /images/ {
     alias  /usr/local/static/images/
}

当用了正则表达式,proxy_pass后面不能加URL_part

location  ~   /test-proxy.html$ {
    proxy_pass   http://www.myblog.com/index;#这是错误操作,不能在接/index
}

端口转发

    upstream default{
        server  :8888;
    }
    #Demo2负载均衡池
   upstream blog{
        server :8888;
    }

   #默认端口转发到
   server {
       listen 80 
       server_name www.域名.com;
       access_log logs/index.log;
       error_log logs/index.error;

       location / {
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://default;
       }
   }
   #Demo2端口转发
   server {
      listen       80;
      server_name  blog.域名.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://blog;
      }
    }



我的web程序是8888端口,而通过域名访问默认是80端口,所以需要监听80端口并转发到我网站程序所在的端口,“server_name blog.域名.com;”中的blog字段需要在域名解析的后台进行配置

动静分离

 server {
       listen       10000;
       server_name  www.myblog.com;
      
      #拦截后台请求,myblog.com的请求代理到testblog.com
      location / {
        proxy_pass http://www.testblog.com;
        proxy_set_header X-Real-IP $remote_addr;
      }

      #拦截静态资源
      location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
          root /opt/static;
       }

    }

反向代理

反向代理(Reverse Proxy)方式是指以代理服务器外网方式来接受internet上的连接请求,然后将请求转发给内网的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

server{
    listen    80;
    server_name   www.myblog.com
    
    location / {
        proxy_pass http://192.168.30.80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    } 
}

负载均衡

负载均衡其实是基于反向代理向后台不同服务器进行资源调度和分配,因此nginx负载均衡是特殊的反向代理

负载均衡基本配置
upstream backserver {
    server 192.168.3.80
    server 192.168.3.81
}
  • upstream:创建节点服务器组的关键字,必须有;
  • blog:节点服务器组的名字,必须有,可自定义名字;
  • server:关键字,后面可加IP或者域名或者IP:端口,端口默认80;
  • weight:权重,数值越大被分配的请求越多。默认为1
server {
    listen       80 
    server_name     www.myblog.com
    location / {
        proxy_pass http://backserver;
        index index.html index.php;
    }
}
负载均衡策略配置

1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除,适用于两台服务器配置基本相同
2.权重

upstream backserver {
    server 192.168.3.80 weight=1;
    server 192.168.3.81 weight=2;
}

按比例进行分配, 192.168.3.80分配一次, 192.168.3.81分配2次
3.ip_hash(静态调度算法)
每个请求按客户端IP的hash结果分配,当新的请求到达,先将客户端IP通过哈希算法哈希出一个值,在随后的分配客户端请求中,客户IP的哈希值只要相同,就会被分配到同一台服务器,可以解决session的问题。

upstream backserver {
    ip_hash; 
    server 192.168.1.207;
    server 192.168.1.206;
}

参考文章
https://segmentfault.com/a/1190000018493330
https://my.oschina.net/xinson/blog/3012614

websocket下的nginx配置

image.png

在在线安装接口自动化管理平台的时候前端一直报ws 404
websocket使用ws的方式连接,如果用ip+端口是可以正常连接的,把ip和端口换成域名后就报404(域名是二级域名)


image.png

通过在源码中添加log发现,ws已经关闭了

    server{
        listen 80;
        server_name  yapi.tanjiexia.com;
        access_log logs/yapi.log;
        error_log logs/yapi.log;
        location /{
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://yapi;
+               proxy_set_header Upgrade $http_upgrade;
+               proxy_set_header Connection "upgrade";
        }

    }

添加nginx修改之后ws正常连接,走的onsuccess。。。


image.png

image.png

Nginx同域名下部署多个单页面应用

转载自:https://segmentfault.com/a/1190000018319774

Nginx常用命令

nginx -t  检查配置文件是否有语法错误
yxl@iZuf6iuhf2ikZ:/etc/nginx/sites-enabled$
yxl@iZuf6iuhf2ikZ:/etc/nginx/sites-enabled$ sudo nginx -t
nginx: [warn] conflicting server name "" on 0.0.0.0:8888, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx -s stop
nginx -s reload

你可能感兴趣的:([技术探索]Nginx配置)