• nginx问题相关记录


    nginx目前主要用来做反向代理和负载均衡,其实它也可以是一个web服务器;

    1、反向代理:

    location /api/ {
    proxy_next_upstream error timeout http_503 http_502 http_504;
    proxy_pass http://myweb1-server/api/;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;

    }

    2、七层的负载均衡:

    upstream web1 {
    server 127.0.0.1:111 weight=1;
    server 127.0.0.1:222 weight=1;
    }
    upstream web2 {
    server 127.0.0.2:111 weight=1;
    server 127.0.0.2:222 weight=6;
    server 127.0.0.2:333 weight=7;
    }


    3、nginx中root与alias的区别:

    1、root的处理结果是:root路径+location路径
    alias的处理结果是:使用alias路径替换location路径

    例如:location /a/{

                              root /data/www;

                             }

    访问http://dlgde.cn/a/page.html,root会对应到资源/data/www/a/page.html,也就是root路径+location路径;

    而location /a/{

                              alias /data/www;

                             }

    同样请求http://dlgde.cn/a/page.html,请求资源查找路径是 /data/www/page.html,不管location怎默写,都是去alias指定的路径。

    2其他区别:

    1. alias 只能作用在location中,而root可以存在server、http和location中。
    2. alias 后面必须要用 “/” 结束,否则会找不到文件,而 root 则对 ”/” 可有可无 

    详情参考;

    4、获取客户端的真实ip

    跟proxy_set_header配置有关,具体参考。经过反向代理设置以后,真正的客户端的ip是取X-Forwarded-For中第一个非unknown的有效IP字符串。

    5、nginx手机跳转设置,

    加个条件判断,是手机请求,就rewrite到手机相应的网址。例如:

    location / {
    if ($http_user_agent ~* "(Android|iPhone|iPod|Symbian|BlackBerry|Windows Phone|Mobile|J2ME)") {
    rewrite ^ http:stage01.dlgde.cn permanent;
    }
    root /data/www/stage01/dlgde/;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
    expires 5;
    }

    6、nginx中的try_files 使用:

    如5中提到的,这个指令,其作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。但最后一个一定不能为空,不然会进入死循环而报500的错误,参考

    7、nginx中的if是个坑:

    nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,例子查看

    8、nginx和php网页结合

    访问的时候会出现下载源文件的问题,这是因为nginx本身不能解析php的文件,需要在nginx中改一下配置,把下面这个加上。

    location ~ .php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    上面这个配置其实也还是说最后还是需要一个php的服务来解析,先装一个php-fpm,具体安装参考,其实安装好了还是有很多坑的,因为当你把php-fpm的服务启动的时候,你发现还是不能访问,并且发现9000端口并没有启动,其实看下php-fpm的配置文件就知道了/etc/php7.2/fpm/pool.d/www.conf     里面listen = /var/run/php7.2-fpm.sock,发现监听的不是9000端口。改为listen = 9000,然后重启php-fpm的服务,9000端口正常启动,但是访问的时候说File not find,看来是文件没有找到。检查“location ~ .php$ {”配置项,发现了一行“fastcgi_param”的配置,然后将其改成了nginx的默认web目录(本机是/usr/share/nginx/html/),再次重启nginx服务后,发现可以进行访问了。如:

    fastcgi_param  SCRIPT_FILENAME  /data/www/nginx/html$fastcgi_script_name;

    nginx配合php还是比较坑的!

    其他待记录。。。

  • 相关阅读:
    消息中间件三、RabbitMQ学习一
    消息队列学习一 概念
    发送网络请求调用第三方接口(spring boot框架)
    动态生成javaBean
    达梦dm数据库远程备份与恢复
    springboot定时任务的使用
    抽象与接口
    电商网站后台九大功能模块详解
    面向对象设计—类和对象
    常用的数据结构—数组
  • 原文地址:https://www.cnblogs.com/qstudy/p/9926572.html
Copyright © 2020-2023  润新知