suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Nginx-Konfigurationsfehler

nginx-Konfiguration

# user  nobody;
worker_processes  1;

# error_log  logs/error.log;
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;

# pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 开启gzip
    gzip on;
    # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
    gzip_min_length 1k;
    # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
    gzip_comp_level 2;
    # 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    # 是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_vary on;
    # 禁用IE 6 gzip
    gzip_disable "MSIE [1-6]\.";

    #配置nginx缓存
    proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=cache_one:500m inactive=10d max_size=10g;
    proxy_temp_path /etc/nginx/cache/temp;

    upstream service {
        ip_hash;
        server 127.0.0.1:13333 max_fails=2 fail_timeout=5s;
        server 127.0.0.1:13334 max_fails=2 fail_timeout=5s;
    }

    server {
        listen       80;
        server_name  xxxxx.com;

        listen       443 ssl;
        underscores_in_headers on;
        ignore_invalid_headers off;

        ssl_certificate      cert/214001950380329.pem;
        ssl_certificate_key  cert/214001950380329.key;

        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        #charset utf-8;

        #access_log  logs/host.access.log  main;

        #网站首页
        location / {
            root   /data/www/;     #html;
            index  index.html index.htm;
        }

        #后台工程配置
        location ^~/admin/ {
            alias   /data/backend/www/;
            index  index.html;
        }
        location /api/ {
            proxy_pass http://localhost:3000/api;
        }

        location /service {
            proxy_set_header X-Real-IP  $http_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_pass http://service;
        }

        location ~ .*\.(js|css|gif|jpg|jpeg|png|webp|bmp|swf|flv)$ {
            root /data/www; 
            #向upstream服务器同时发送http头,头信息中包括Host:主机、X-Real-IP:客户端真实IP地址
            proxy_set_header   Host $host:$server_port;
            proxy_set_header   X-Real-IP   $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            # proxy_pass http://127.0.0.1;
            # proxy_redirect off;
            #上面定义的cache_one缓存区被用于这个位置。 Nginx会在这里检查传递给后端有效的条目。
            proxy_cache       cache_one;
            proxy_cache_valid 200 304 12h;
            proxy_cache_valid any 10m;
            proxy_cache_key   $host$uri$is_args$args;
            add_header  Nginx-Cache "$upstream_cache_status";  
            expires max;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    include servers/*;
}

error.log

2017/06/02 15:50:12 [error] 26536#26536: *3768 open() "/data/www/admin" failed (2: No such file or directory), client: xxxxxxxxx, server: xxxxx.com, request: "GET /admin HTTP/1.1", host: "xxxxx.com"

Das Homepage-Verzeichnis der Website befindet sich unter /data/www
Die Admin-Homepage befindet sich unter /data/backend/www/

Was sollte die richtige Kombination sein?

为情所困为情所困2726 Tage vor1102

Antworte allen(2)Ich werde antworten

  • 世界只因有你

    世界只因有你2017-06-06 09:56:31

    因为你配置的路径是匹配 /admin/ url以/admin/开始的才请求/data/www/admin

    你访问xxxxx.com/admin 相当于匹配的还是第一个

       #网站首页
        location / {
            root   /data/www/;     #html;
            index  index.html index.htm;
        }

    访问xxxxx.com/admin/ 才匹配的是

        #后台工程配置
        location ^~/admin/ {
            alias   /data/backend/www/;
            index  index.html;
        }

    另外, 你也可以改成两个server,从根本上隔离网站首页和网站管理端,也方便后面添加域名什么的

    Antwort
    0
  • PHPz

    PHPz2017-06-06 09:56:31

    你的nginx是用什么用户运行的?/data/www/admin 的目录权限又是什么,检查一下

    Antwort
    0
  • StornierenAntwort