# How to fix nginx server returning 302 redirect instead of 200

**URL:** <https://www.ruby-forum.com/t/how-to-fix-nginx-server-returning-302-redirect-instead-of-200/243684>\
**Category:** NGINX\
**Created:** [December 19, 2015, 5:12pm UTC](https://www.ruby-forum.com/t/how-to-fix-nginx-server-returning-302-redirect-instead-of-200/243684 "2015-12-19T17:12:36Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sadaf\_N](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/858c86/32.png) [@Sadaf\_N](https://www.ruby-forum.com/u/Sadaf_N)\
**Post date:** [December 19, 2015, 5:12pm UTC](https://www.ruby-forum.com/t/how-to-fix-nginx-server-returning-302-redirect-instead-of-200/243684/1 "2015-12-19T17:12:36Z")

</div>

On this setup, there is a server directive listening to port 80 that  
returns www to non www and returns 80 to 443.

The second server is Nginx as SSL terminator, so it’s an SSL virtual  
host,  
that proxies the request to Varnish, and the last server is the last  
host  
on the chain, that processes and serves back the requests.

Now, when I bypass the chain and do a `curl -v 127.0.0.1:8081` ( this is  
the backend vhost, the last in the chain ) I get a 302 redirect instead  
a  
200. This is causing problems on my CMS and also with Varnish  
communicating  
to the backend.

```
This is the curl response :

* Rebuilt URL to: 127.0.0.1:8081/
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8081 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 127.0.0.1:8081
> Accept: */*
>
< HTTP/1.1 302 Found
* Server nginx/1.9.9 is not blacklisted
< Server: nginx/1.9.9
< Date: Sat, 19 Dec 2015 16:04:14 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: HHVM/3.11.0
< Vary: Accept-Encoding
< Location: https://domain.com
<
* Connection #0 to host 127.0.0.1 left intact

```

And this is my nginx configuration :

```
server {
    listen 80;
    server_name www.domain.com;
    return 301 $scheme://domain.com$request_uri;
    if ($scheme = http) {
                return 301 https://$server_name$request_uri;
        }

}

server {

listen 443 default_server ssl http2;

server_name domain.com;
access_log off;
ssl_certificate /etc/ssl/private/cert_chain.crt;
ssl_certificate_key /etc/ssl/private/server.key;

if ($allow = no) {
        return 403;
        }
        if ($bad_referer) {
        return 444;
        }

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header HTTPS "on";
}
}

server {

listen 127.0.0.1:8081;
root /var/www/domain.com/wordpress;
        index index.php index.html index.htm;
server_name domain.com;
error_log /var/log/nginx/upstream.log info;

        if ($allow = no) {
        return 403;
        }
        if ($bad_referer) {
        return 444;
        }

location ~*

```

^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|css|js)$  
{  
add\_header Cache-Control “public, max-age=600”;  
add\_header Access-Control-Allow-Headers “X-Requested-With”;  
add\_header Access-Control-Allow-Methods “GET, HEAD,  
OPTIONS”;  
add\_header Access-Control-Allow-Origin “\*”;

```
access_log off;
}

        client_body_buffer_size 124K;

        client_header_buffer_size 1k;

        client_max_body_size 100m;

        large_client_header_buffers 4 16k;

        error_page 404 /404.html;

        gzip on;
        gzip_disable "msie6";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types application/json application/x-javascript

```

application/xml text/javascript text/plain text/css  
application/javascript  
text/xml application/xml+rss;  
try\_files $uri $uri/ /index.php?$args;  
# Rewrites for Yoast SEO XML Sitemap  
rewrite ^/sitemap\_index.xml$ /index.php?sitemap=1 last;  
rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$  
/index.php?sitemap=$1&sitemap\_n=$2 last;  
include hhvm.conf;  
# include domain.com-ps.conf;  
# include multisite.conf;  
rewrite /wp-admin$ $scheme://$server\_name$uri/ permanent;  
error\_page 500 502 503 504 /50x.html;  
location = /50x.html {  
root /usr/share/nginx/html;  
}

```
if ($bad_client) { return 403; }

        #location / {
        #try_files $uri $uri/ /index.php?$args;
#}

}

```

–

ELSITAR

---

<div class="post-metadata">

**Author:** ![Xavier\_Cardil\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/9dc877/32.png) [@Xavier\_Cardil\_C](https://www.ruby-forum.com/u/Xavier_Cardil_C)\
**Post date:** [December 19, 2015, 6:07pm UTC](https://www.ruby-forum.com/t/how-to-fix-nginx-server-returning-302-redirect-instead-of-200/243684/2 "2015-12-19T18:07:31Z")

</div>

This doesn’t seem to be an nginx issue. The presence of the  
“X-Powered-By:  
HHVM/3.11.0” in your response means your backend is the one issuing the  
302  
redirect, so you should investigate that instead of nginx.

On Sat, Dec 19, 2015 at 5:11 PM, Xavier Cardil C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
