Nginx

常用命令

windows下不可以全局使用nginx命令,除非重新编译或者写包装脚本
windows下路径映射用/ localhost 只能匹配一级不可以多级
sudo nginx -s reload         #重新加载配置文件
docker restart nginx1
docker exec -it nginx /bin/bash
whereis nginx  查找nginx配置文件地址(/usr/local/nginx)
docker inspect 容器名称
nginx -t    #检查配置文件正确性
./nginx -s stop  #关闭
win电脑中nginx  路径映射 用 正斜杠 

docker 容器内nginx配置文件地址在 /etc/nginx

nginx映射路径问题问题

location 路径前后都要加/

location中采用替换原则 127...../api/ 替换 /127.0.0.1:2801   路径后边/ 要加的话下边地址也要加 要不加 都不加     

请求打到80 端口 nginx 通过外部或者内网访问到确定主机ip 进行转发 类似 http 容器内的配置文件ip 不要写 127 或者location 写内网ip

    location /user {
		proxy_pass     http://172.210.1.204:17881/user;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
    }
proxy_pass 加/和不加/
proxy_pass代理的时候,下面两种写法的区别:


location /proxy/ {
    proxy_pass http://proxy_ip;
}

location /proxy/ {
    proxy_pass http://proxy_ip/;
}

当访问http://ip/proxy/1.html的时候,如果是第一种配置,则代理访问http://proxy_ip/proxy/1.html,如果是第二种配置,则代理访问http://proxy_ip/1.html

root和alias的区别
root语法规则:
语法: root path;
配置块: http、server、location、if
alias语法规则:
语法: root path;
配置块: http、server、location、if
下面这两种写法的区别(html是nginx的默认访问根目录):
location /dir1/ {
	alias html/dir1;
}

location /dir1/ {
	root html/dir1;
}
当访问http://ip/dir1/1.html的时候,如果是第一种配置,则会在html/dir1目录下找1.html文件,如果是第二种配置,则会在html/dir1/dir1目录下找1.html文件


	upstream myserver {
        server 127.0.0.1:8081;
		server 127.0.0.1:8082;
    }

	#监听一个端口
    server {
        listen       12085;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   E:/company/web/jgpcpage2021/Gzzhjkpc;
        }
		location /api/ {
			proxy_pass  http://127.0.0.1:28081/;
		}
访问http://127.0.0.1:12085/api/ => http://127.0.0.1:28081/

例如
http://127.0.0.1:28081/reportForms/surplusStatistics/getAccidentStatisticsTable => http://127.0.0.1:12085/api/reportForms/surplusStatistics/getAccidentStatisticsTable

负载均衡

    upstream myserver {
        server 208.208.128.122:8081;
        server 208.208.128.122:8082;
    }
    server上边
    
    
     proxy_pass   http://myserver;
     
     
        location / {
            root   html;
			proxy_pass   http://127.0.0.1:8081;
            index  index.html index.htm;
        }
		location /service {
            proxy_pass http://127.0.0.1:8081/hello;
        }

静态资源映射路径问题

autoindex  on;   访问的时候要在文件夹后边夹/才可以

资源映射一

记得设置配置文件的user

假如文件放在 /root/file 文件夹内

      location /file/ {
            root   /root;
       }

root 关键字配置的路径是追加的

所以访问

http*:80/file/1.txt   ==> /root/file/1.txt

如果在docke内进行文件映射访问的话 要修改权限 修改nginx.config user root 为最高权限

切记 映射文件夹 要挂载到docker容器内 要不然找不到

资源映射二

而Nginx提供了另外一个静态路径配置:alias配置

location /i/ {
    alias /root/file/;
}
http/i/1.txt   ===>  /root/file/1.txt

root响应的路径:配置的路径+完整访问路径(完整的location配置路径+静态文件)

alias响应的路径:配置路径+静态文件(去除location中配置的路径)

注意:使用alias时目录名后面一定要加“/”;一般情况下,在location/中配置root,在location /*中配置alias

对比:

location /file/ {
root   /root;
}

/file/1.txt   ===>/root/file/1.txt
location /file/ {
    alias /root/file/;
}
/file/1.txt   ===>

设置反向代理

  1. -it:表示分配一个伪终端。
  2. nginx:表示容器的名称,这里也可以使用容器ID。
  3. /bin/bash:表示对容器执行bash操作。

bug

location 匹配有顺序问题 上到下 /

location 指令说明

该指令用于匹配 URL。
语法如下:

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。

nginx 分配服务器策略

a. 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
配置方式:

b. weight

weight 代表权重, 默认为 1,权重越高被分配的客户端越多

upstream myserver {
    server 208.208.128.122:8081 weight=10;   #  在这儿
    server 208.208.128.122:8082 weight=10;
}
server {
    listen       80;
    server_name  208.208.128.122;
    location / {
        root   html;
        proxy_pass   http://myserver;
        index  index.html index.htm;
}

c. ip_hash

ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器

upstream myserver {
	ip_hash;							//  在这儿
    server 208.208.128.122:8081 ;   
    server 208.208.128.122:8082 ;
}
server {
    listen       80;
    server_name  208.208.128.122;
    location / {
        root   html;
        proxy_pass   http://myserver;
        index  index.html index.htm;
}
d. fair(第三方)
fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream myserver {					
    server 208.208.128.122:8081 ;   
    server 208.208.128.122:8082 ;
    fair; 														#  在这儿
}
server {
    listen       80;
    server_name  208.208.128.122;
    location / {
        root   html;
        proxy_pass   http://myserver;
        index  index.html index.htm;
}

动静分离 文件映射

image-20211119111602747

image-20211119111528359

image-20211119111617959

image-20211119111633589

posted @ 2021-10-29 14:11  李广龙  阅读(78)  评论(0)    收藏  举报