笔记--nginx

                配置:
            conf/nginx.conf
                ##全局配置段
                user  nobody;    #worker进程的用户,尽量不要用root
                worker_processes  1;    #worker进程数,不要大于cpu核数
                error_log  logs/error.log info;        #错误日志及级别
                ##event配置段
                events {
                    worker_connections  1024;
                    use epoll;
                }
                ##http配置段
                http {
                    include       mime.types;
                    default_type  application/octet-stream;
                    sendfile        on;
                    keepalive_timeout  65;
                    server_tokens off;    #隐藏版本
                    upstream tomcat {
                        server localhost:8080;    #定义upstream server
                    }
                    #server配置段
                    server {
                        listen       80;
                        server_name  192.168.80.172;
                        location / {
                            proxy_pass http://tomcat/ppw/;  #反向代理,有路径写在这里
                        }
                        error_page   500 502 503 504  /50x.html;
                        location = /50x.html {
                            root   html;
                        }
                    }
                }
        
       后端服务器主备配置:
            upstream test {
                server 192.168.80.172:8080;
                server 192.168.80.172:8081 backup;
            }

       注:没有相同域名的server主机,会找满足端口要求的第一个主机

       访问控制:
            可以放至 http,server,location等
            allow  192.168.80.0/24;
            deny all;

        目录映射:
            #全局配置
                root   html;    
                
                location / {
                    #proxy_pass http://test;
                    index  index.html index.htm;

                }
                location /aa {                    #访问xxx.com/a -->html/aa/index.html
                        index index.html;
                }
            #分别配置:
                location / {
                    #proxy_pass http://test;
                    root   html;
                    index  index.html index.htm;

                }

                location /bb {
                        root html/aa;            #访问xxx.com/bb -->html/aa/bb/index.html,其实是将/bb加在root路径后面
                        index index.html;
                }

       反向代理:
            upstream apiServer {
                server 10.10.10.10:8888
                ...
            }
            server {
                ...
                location /api {
                   proxy_pass http://apiServer; 
                   proxy_cookie_domain apiServer a.test.com;  #替换response set-cookie头中的domain属性
                    #语法:proxy_set_header field value;
                    #field :为要更改的项目,也可以理解为变量的名字,比如host
                    #value :为变量的值
                   proxy_set_header host $host;        #默认值为$proxy_host,会修改header中host的字段为后端real server的ip,$host和$http_host相同,只能写一个,代表请求的原始host
                   proxy_set_header X-Real-IP      $remote_addr;    #"$http_x_real_ip",添加了这个变量的值
                   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        #修改了$http_x_forwarded_for的值,为"$remote_addr,上一跳的ip"
                        #用来设置被代理端接收到的远程客户端IP,如果不设置,则header信息中并不会透传远程真实客户端的IP地址。
                }       
                ...
            }
            
        url的/问题
            在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。
            1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和参数部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)
            2.如果在目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址
            下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。

            第一种:
                location /proxy/ {
                     proxy_pass http://127.0.0.1:81/;
                }
                会被代理到http://127.0.0.1:81/test.html 这个url
            第二种(相对于第一种,最后少一个 /)
                location /proxy/ {
                     proxy_pass http://127.0.0.1:81;
                }
                会被代理到http://127.0.0.1:81/proxy/test.html 这个url
                 
            第三种:
                location /proxy/ {
                     proxy_pass http://127.0.0.1:81/ftlynx/;
                }
                会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。
                 
            第四种情况(相对于第三种,最后少一个 / ):
                location /proxy/ {
                     proxy_pass http://127.0.0.1:81/ftlynx;
                }
                会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url
            
        nginx_upstream_check_module(nginx状态页面)安装:
            1    unzip nginx_upstream_check_module-master.zip 
            2    进入 nginx 源码目录, 并用 patch 命令 对源文件打补丁
                patch -p1 < /root/smb/software/nginx/nginx_upstream_check_module-master/check_1.16.1+.patch
            3    编译nginx
                ./configure --prefix=./nginx --add-module=../nginx_upstream_check_module-master --with-http_ssl_module
                下略
                报错:OpenSSL library is not used
                    --with-http_ssl_module
            4    配置nginx.conf
                upstream test111 {
                    server 172.17.1.1;
                    server 172.17.3.164:8080;
                    check interval=2000 rise=2 fall=2 timeout=1000 type=http;
                    # check_http_send "HEAD / HTTP/1.0\r\n\r\n";
                    # check_http_expect_alive http_2xx http_3xx http_4xx;
                }
                --------
                server {
                    listen       80;
                    server_name  localhost;
                    location / {
                        proxy_pass http://test111;
                    }
                    location /status {
                       check_status;
                       access_log off;
                    }
                .....
            
        rewrite:
            例,重定向url,并反向代理至多台kibana
                upstream kibanaServer {
                    ip_hash;                                                                    #同一ip,负载均衡到固定的后端kibana
                    server 10.78.228.162:5601;
                    server 10.78.228.163:5601;
                    server 10.78.228.164:5601;
                    check interval=5000 rise=1 fall=3 timeout=4000;
                }
                server {
                    ...
                    location ~ /elk {
                        rewrite ^/.* /kibana last;
                    }
                    location /kibana/ {
                        proxy_pass http://kibanaServer;
                    }
                }
                
        server_name:
            nginx会解析http header里的host 找到匹配的server_name 如果没有则用默认的  或者第一个

            例:禁止ip访问:
            server {
                      listen      80;
                      server_name  _;
                      return 404;
               }
             server {
                    listen       80;
                    server_name  www.hello.com;
            }

            当用ip访问的时候 没有匹配的server 则会匹配到第一个server  返回404
            
        文件服务器:
            在nginx.conf的http{}上下文中,增加
                autoindex on;# 显示目录
                autoindex_exact_size on;# 显示文件大小
                autoindex_localtime on;# 显示文件时间

            指定路径:
                location ~ /files {
                        access_log off;
                        #root /tmp;
                        alias /tmp/;
                }
                
            httpd 实现:在/etc/httpd/conf/httpd.conf中增加
                <Directory "/home/wwwroot/rpms">
                    Options Indexes MultiViews FollowSymLinks
                    AllowOverride None
                    Order allow,deny
                    Allow from all
                </Directory>    
            
            python实现(单线程):
                python3 -m http.server 88

            
        增加登录验证:
                    location / {
                            proxy_pass http://127.0.0.1:5601$request_uri;

                            auth_basic "登录验证";
                            auth_basic_user_file /etc/nginx/htpasswd;

                    }
                $request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。

            密码生成:
                htpasswd -c -b /etc/nginx/htpasswd kibana kibana
                -c:创建一个加密文件 -b:在命令行中一并输入用户名和密码而不是根据提示输入密码
                    密码采用 apr1 方式加密

                注意修改密码文件权限:
                    chmod 600 htpasswd
                    chown nobody. htpasswd

猜你喜欢

转载自blog.csdn.net/weixin_42573277/article/details/114624247
今日推荐