• nginx 使用配置知识


    启动nginx:
    service nginx start
    启动后观察进程信息:
    ps aux | grep nginx,得到结果:
    root      3630  0.0  0.0   7892   684 ?        Ss   02:24   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
    nginx     3631  0.0  0.1   8052  1484 ?        S    02:24   0:00 nginx: worker process                  
    root      3647  1.0  0.0   4356   728 pts/1    S+   02:26   0:00 grep nginx
    从上面信息,我们看到nginx的启动命令实际为:
    /usr/sbin/nginx -c /etc/nginx/nginx.conf
    其中/usr/sbin/nginx是nginx程序 -c是选取配置文件 /etc/nginx/nginx.conf配置文件路径
    打开文件/etc/nginx/nginx.conf:
    vi /etc/nginx/nginx.conf, 我们看到:
    user  nginx;
    worker_processes  1;                                                                                                           

    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;


    events {
        worker_connections  1024;
    }

    http {
        include       /etc/nginx/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  /var/log/nginx/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        keepalive_timeout  65;

        #gzip  on;

        include /etc/nginx/conf.d/*.conf;

    }
    在http参数中,我们发现了一个特殊的词语:include,其含义是,除了本配置文件之外,还有一些配置信息写在了其他被“include”过的文件中,最重要的是这句: 
    include /etc/nginx/conf.d/*.conf;
    这句话的意思是/etc/nginx/conf.d/目录下面的所有以conf为后缀名的文件都被http因为配置项,我们要设置自己的配置,只需要在本目录下面创建一个后缀名为conf的文件,添加配置项。
    于是我在该目录下创建了文件myserver.conf,其内容如下:
    server {
         listen     80;   // 监听端口
         server_name  localhost; // 监听地址
         location / {
                root   /usr/share/nginx/html;   // 根目录位置
                index  index.html index.htm; // 作为默认页的页面文件
         }
     
    }
     
    配置好设置后,可以启动nginx,实验一把了
    service nginx restart
    现在去浏览器上面访问服务器ip,结果:
    奇怪!
    通过排查发现:权限问题,注意nginx.conf中有这样一句话:
    user  nginx;
    意思是,当前开启nginx程序的用户是nginx用户,而我的目录/usr/share/nginx/html属于root用户,显然权限不够,于是把上面那句话修改为:
    user  root;
    在root用户登录状态下执行:
    service nginx restart
    现在访问IP就一切正常了
     
    设置反向代理:
    在myserver.conf中添加如下配置:
    location / {
         proxy_pass    http://10.100.212.66:8088/;
         proxy_redirect default ;
    }
    这时相当于nginx代理了http://10.100.212.66:8088/的服务
    访问nginx服务器ip相当于访问http://10.100.212.66:8088/
     
    负载均衡:
    假设我现在有三个服务器其IP分别为:
    10.100.134.1
    10.100.134.2
    10.100.134.3
     
    现在选择10.100.134.1为主服务器,要在10.100.134.2和10.100.134.3上面部署相同的服务
    利用nginx来做负载均衡,在myserver.conf中添加配置项如下:
     
    upstream xx {
            server 10.100.134.2 ;
            server 10.100.134.3 ;
    }
    server {
            listen       80;
            server_name  localhost;
     
            location / {
                proxy_pass  http://xx/;                                                                                            
                proxy_redirect default ;
            } 
    }
    现在重启nginx,访问http://10.100.134.1就相当于均衡的访问10.100.134.2和10.100.134.3
    如果还想将主服务器也作为应用服务器,可以将10.100.134.1上面服务的监听端口改为非80端口,
    比如8088,那么三台服务器一起作为应用服务器负载的nginx的配置为:
    upstream xx {
            server 10.100.134.1:8088;
            server 10.100.134.2 ;
            server 10.100.134.3 ;
    }
    server {
            listen       80;
            server_name  localhost;
     
            location / {
                proxy_pass  http://xx/;                                                                                            
                proxy_redirect default ;
            } 
    }
     
    不同应用服务器session问题:
    如果只作上面配置,在访问普通没有验证的页面是没啥问题的,但是如果每个应用服务器有session的话可就麻烦了,举个例子:
    1.用户首先请求登录页面,这时候nginx把该请求定向到10.100.134.2服务器,那么登陆成功后10.100.134.2就在本地设置了session
    2.这时候跳转到首页,这时候nginx把该请求定向到10.100.134.3服务器,服务器检查session,发现没有合法session,于是又跳转到登录页
     
     
     ip_hash
    nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:

    upstream xx {
            server 10.100.134.1:8088;
            server 10.100.134.2 ;
            server 10.100.134.3 ;
            ip_hash;
    }

    ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,因此ip_hash是有缺陷的,不能在一些情况下使用:

    1/ nginx不是最前端的服务器。ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用 的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。
  • 相关阅读:
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    常见的http response
    ==容易错误的例子
    点击panel滚动条滚动到底部
    fabric实现文本聚焦、可编辑
    JSON.parse()和JSON.stringify()的使用
    centos7安装mysql
    阿里云第一次访问tomcat非常慢的解决办法
    java中的语法糖
    jvm | 基于栈的解释器执行过程
  • 原文地址:https://www.cnblogs.com/candycloud/p/4898592.html
Copyright © 2020-2023  润新知