美文网首页
nginx配置相关

nginx配置相关

作者: ironman_ | 来源:发表于2019-02-24 17:30 被阅读0次

    一个例子:

    server {
        listen 80;
        server_name priv.gethnode.com;
        location / {
            proxy_pass http://127.0.0.1:18548;
        }
    }
    

    location的匹配规则

    基于最完整匹配原则
    比如有几个location

    location / { }
    location /images/ { }
    location /blog/ { }
    location /planet/ { }
    location /planet/blog/ { }
    

    http://example.com将被/匹配,http://example.com/planet/blog/将被/planet/blog/匹配

    参考文档:https://www.linode.com/docs/web-servers/nginx/how-to-configure-nginx/#location-blocks

    proxy_pass的理解

    server的配置:

    #server config
    server {
        listen        80;
        server_name   test.com;
    }
    

    如果proxy_pass只是一个host,不是一个uri,

    location /app/ {
        proxy_pass      http://192.168.154.102;
    }
    
    test.com/app/xxxxx =>  http://192.168.154.102/xxxxx
    

    如果proxy_pass是一个uri

    location /app/ {
        proxy_pass      http://192.168.154.102/maped_dir/;
    }
    
    test.com/app/xxxxx =>  http://192.168.154.102/maped_dir/xxxxx
    

    参考文章:
    https://www.liaohuqiu.net/posts/nginx-proxy-pass/

    对于静态文件

    nginx一般是用www-data用户来运行的(不是root用户,跟nginx版本有关系,有可能是nobody),这个配置可以从nginx.conf里查看user

    所以对于的文件组应该也是属于www-data这个用户组下面的

    可以在根目录下创建一个文件夹,授权给www-data这个目录,不要放在/root/目录下,不然会访问不到报403

    给文件设置用户组以及对应的权限:

    //给文件夹以及子文件夹设置用户和用户组
    chown -R www-data:www-data static_folder
    //给文件夹和子文件夹设置权限
    chmod -R 755 static_folder
    //给文件设置权限
    chmod g+r xxx/*
    

    在nginx下配置对应的staic文件夹

    server {
        listen 80;
        server_name mapi.cxtchain.org;
        access_log /var/log/nginx/mapi-access.log;
    
        location / {
            proxy_pass      http://127.0.0.1:9090;
        }
        location /app/ {
            root /;
        }
    }
    

    这里第二个location就是配置的static文件的路径,如果用root,那么路径就会追加到路径后面,比如:

    location /app/ {
            root /123/ironman/;
        }
    

    访问sample.com/app/xxx => /123/ironman/app/xxx

    root可以替换为alias这样就直接就是alias后面的路径

    location /app/ {
            alias /123/ironman/;
        }
    
    `sample.com/app/xxx` => `/123/ironman/xxx`
    

    解决问题的小技巧

    可以通过查看nginx的error.log查看到底是文件找不到还是权限不够
    比如

    2019/05/18 10:49:56 [error] 8836#0: *222 open() "/static/static/mycss.css" failed (13: Permission denied), client: 58.62.201.38, server: xxx, request: "GET /static/static/mycss.css HTTP/1.1", host: "xxx"
    2019/05/18 10:49:57 [error] 8836#0: *222 open() "/static/static/mycss.css" failed (13: Permission denied), client: 58.62.201.38, server: xxx, request: "GET /static/static/mycss.css HTTP/1.1", host: "xxx"
    2019/05/18 10:49:57 [error] 8836#0: *222 open() "/static/static/mycss.css" failed (13: Permission denied), client: 58.62.201.38, server: xxx, request: "GET /static/static/mycss.css HTTP/1.1", host: "xxx"
    

    通过命令查看文件及各级父目录的权限

    [root@mock-01 nginx]# namei -l static/css/mycss.css
    f: static/css/mycss.css
    drw-r--r-- nginx nginx static
    drwxr-xr-x nginx nginx css
    -rw-r--r-- nginx nginx mycss.css
    

    如果一直出现 "13 permission denied"

    可以尝试这么解决

    gpasswd -a www-data root
    
    chmod g+x /root/
    chmod g+x /root/.../static/
    
    nginx -s reload
    

    这里的www-data指nginx的用户名称
    第二个命令最好逐级目录运行下去,直到你的static文件夹
    最后别忘了重新启动nginx
    参考Stack Overflow解答

    常用命令

    nginx -s stop //停止
    nginx -s reload  //重新加载配置文件
    nginx  //启动nginx
    
    sudo systemctl stop nginx
    sudo systemctl start nginx
    sudo systemctl restart nginx
    sudo systemctl reload nginx
    

    相关文章

      网友评论

          本文标题:nginx配置相关

          本文链接:https://www.haomeiwen.com/subject/ggjbyqtx.html