nginx重定向问题解决(rewrite or internal redirection cycle)
作者:mmseoamin日期:2023-12-05

文章目录

  • 错误日志和配置文件
  • 问题分析

    错误日志和配置文件

    访问日志文件

    2023/10/15 07:13:48 [error] 30#30: *1 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 123.55.159.97, server: server_name, request: "GET / HTTP/1.1", host: "xxx.xxx.xxx.xxx"
    123.55.159.97 - - [15/Oct/2023:07:13:48 +0000] "GET / HTTP/1.1" 500 579 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46"
    123.55.159.97 - - [15/Oct/2023:07:13:48 +0000] "GET /favicon.ico HTTP/1.1" 500 579 "http:///" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46"
    2023/10/15 07:13:48 [error] 30#30: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 123.55.159.97, server: server_name, request: "GET /favicon.ico HTTP/1.1", host: "xxx.xxx.xxx.xxx", referrer: "http://xxx.xxx.xxx.xxx/"
    

    nginx.conf配置文件内容

    events {
    	worker_connections  1024;
    }
    http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size     50m;
    client_body_buffer_size  10m; 
    client_header_timeout    1m;
    client_body_timeout      1m;
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_comp_level  4;
    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;
    gzip_vary on;
    server {
    listen       80;
    server_name  my_server_name;
        location / {		
            root   /usr/local/xxx_vue;
            index  index.html index.htm; 
            try_files $uri $uri/ /index.html;	
        }
    		
    location ^~ /api/ {		
            proxy_pass http://xxx.xxx.xxx.xxx:8080/;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;						
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    	
    }
    }
    

    问题分析

    • 根据提供的访问日志和nginx.conf配置文件分析,是循环重定向的问题。
    • 配置中,location / 块使用了 try_files $uri $uri/ /index.html; 会导致导致在尝试访问根目录时发生重定向循环。
    • 修改:添加一个新的location=/index块,直接提供 /index.html 而不进行重定向
      server {
          listen 80;
          server_name my_server_name;
          location / {
              root /usr/local/xxx_vue;
              index index.html index.htm;
              try_files $uri $uri/ /index.html;
          }
          location = /index.html {
              root /usr/local/xxx_vue;
          }
          location ^~ /api/ {
              proxy_pass http://xxx.xxx.xxx.xxx:8080/;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          }
      }
      
      • 使用以下命令重新加载Nginx,即可生效
        sudo nginx -s reload