Nginx虚拟主机不工作(错误重定向)

Nginx虚拟主机不工作(错误重定向),nginx,Nginx,我是nginx新手,我对虚拟主机有问题。当我尝试访问vhost时,虚拟主机不工作,它将被重定向到localhost“欢迎使用nginx”。以下是我的配置文件的内容: /etc/hosts配置: 127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain ****Generated by Admin**** 18.200.10.50 mail.testingweb.com 18.200.10.5

我是nginx新手,我对虚拟主机有问题。当我尝试访问vhost时,虚拟主机不工作,它将被重定向到localhost“欢迎使用nginx”。以下是我的配置文件的内容:

/etc/hosts配置:

127.0.0.1 localhost localhost.localdomain

::1 localhost localhost.localdomain

****Generated by Admin****

18.200.10.50 mail.testingweb.com

18.200.10.50 testingweb.com
server {
        listen 80 default_server;
        # listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/xhtml;
        index index.php index.html index.htm;


        # Make site accessible from http://localhost/
        server_name testingweb.com;
        return 301 https://$host$request_uri;

        location / {
                try_files $uri $uri/ =404;
        }
        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 /usr/share/nginx/html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;

        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
server {
        listen 80;
        listen 443;
        return 403;
}
server {
        listen 80 default_server;
        # listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html/www;
        index index.php index.html index.htm;


        # Make site accessible from http://localhost/
        server_name testingweb.com;

#       rewrite ^ https://$http_host$request_uri? permanent;
        return 301 https://$host$request_uri;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?q=$uri&$args;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules;
        }


   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 /usr/share/nginx/html;
    }

        location ~ \.php$ {
                try_files $uri =404;

        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

#       location = /favicon.ico {
#               alias /usr/share/nginx/html/favicon.ico;
#       }


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
/etc/nginx/conf.d/SSL.conf:

server {
       listen 443 default_server ssl;
       server_name testingweb.com;

       ssl_certificate /etc/nginx/sslcert/xxxx.crt;
       ssl_certificate_key /etc/nginx/sslcert/xxxxx.key;

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

       ssl_prefer_server_ciphers on;
       ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNU$
       ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

       location / {
               root /usr/share/nginx/html;
               index index.php index.html index.htm;
       }

        location ~ \.php$ {
                try_files $uri =404;

                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

}
/etc/nginx/sites available/default配置:

127.0.0.1 localhost localhost.localdomain

::1 localhost localhost.localdomain

****Generated by Admin****

18.200.10.50 mail.testingweb.com

18.200.10.50 testingweb.com
server {
        listen 80 default_server;
        # listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/xhtml;
        index index.php index.html index.htm;


        # Make site accessible from http://localhost/
        server_name testingweb.com;
        return 301 https://$host$request_uri;

        location / {
                try_files $uri $uri/ =404;
        }
        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 /usr/share/nginx/html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;

        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
server {
        listen 80;
        listen 443;
        return 403;
}
server {
        listen 80 default_server;
        # listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html/www;
        index index.php index.html index.htm;


        # Make site accessible from http://localhost/
        server_name testingweb.com;

#       rewrite ^ https://$http_host$request_uri? permanent;
        return 301 https://$host$request_uri;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?q=$uri&$args;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules;
        }


   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 /usr/share/nginx/html;
    }

        location ~ \.php$ {
                try_files $uri =404;

        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

#       location = /favicon.ico {
#               alias /usr/share/nginx/html/favicon.ico;
#       }


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
我想从新的根目录/usr/share/nginx/html/www访问另一个站点。在www目录上有一个wordpress

/etc/nginx/sites available/testingweb配置:

127.0.0.1 localhost localhost.localdomain

::1 localhost localhost.localdomain

****Generated by Admin****

18.200.10.50 mail.testingweb.com

18.200.10.50 testingweb.com
server {
        listen 80 default_server;
        # listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/xhtml;
        index index.php index.html index.htm;


        # Make site accessible from http://localhost/
        server_name testingweb.com;
        return 301 https://$host$request_uri;

        location / {
                try_files $uri $uri/ =404;
        }
        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 /usr/share/nginx/html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;

        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
server {
        listen 80;
        listen 443;
        return 403;
}
server {
        listen 80 default_server;
        # listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html/www;
        index index.php index.html index.htm;


        # Make site accessible from http://localhost/
        server_name testingweb.com;

#       rewrite ^ https://$http_host$request_uri? permanent;
        return 301 https://$host$request_uri;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?q=$uri&$args;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules;
        }


   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 /usr/share/nginx/html;
    }

        location ~ \.php$ {
                try_files $uri =404;

        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

#       location = /favicon.ico {
#               alias /usr/share/nginx/html/favicon.ico;
#       }


        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}
根据配置,我的配置有什么问题?我无法按域访问/usr/share/nginx/html/www目录下的wordpress文件testingweb.com?它总是重定向到默认主机而不是测试Web主机


对不起,我的英语不好。

这是您的pastebin代码中nginx配置的修订版本:

server {
        listen 80;
        # listen [::]:80 default_server ipv6only=on;
        # Make site accessible from http://devdev.com/
        server_name devdev.com;
        return 301 https://$host$request_uri; 
}

# HTTPS server
#
server {
        listen 443 default_server ssl;
        server_name devdev.com;
        root /var/www;
        index index.php index.html index.htm;

        # uncomment to add your access log path here
        # access_log /var/log/nginx/devdev.com.access.log main;

        ssl_certificate /etc/ssl/ssl-unified.crt;
        ssl_certificate_key /etc/ssl/ssl-my-private-decrypted.key;

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

        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        location @default {
                rewrite ^/(.*) /index.php?uri=$request_uri last;
        }

        location / {
                try_files $uri $uri/index.php @default;
        }

        location ~ \.php$ {
                try_files $uri =404;

                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

}
在端口80上侦听的第一个服务器块只是重定向到
https://devdev.com/
。这将把所有
http
请求重定向到
https
,因此您不需要任何其他处理规则

第二个服务器块侦听端口443,并将使用以
.php
结尾的路径代理请求到
php fpm
(您需要再次检查它是否在unix套接字上运行,以及您的权限是否正确)

/
前缀(
location/
)匹配的位置块将尝试匹配请求URI中的文件,并适当地处理请求。例如:

  • 如果请求是针对
    /index.php
    且文件存在,则以下块将匹配
    .php
    后缀和
    php fpm
    的代理
  • 如果请求是针对
    /foo
    的,并且该名称的文件不匹配,nginx将尝试匹配
    /foo/index.php
    ,然后代理到
    php fpm
  • 如果仍然没有匹配项,
    try\u files
    将使用
    @default
    位置块,它只将请求发送到顶级
    /index.php
    ,请求URI作为参数

如果您的WordPress站点位于
/var/www
——顶级入口点应该是
/var/www/index.php
——此配置应该有效。您可能需要根据您的WordPress设置来调整配置——虽然这是通用的,它应该在没有太多更改的情况下工作。

您的默认和TestWeb配置在块的中间返回301个重定向,甚至在向PHP FPM请求代理之前。你的nginx工作正常吗?是的,服务器(nginx)工作正常。那么,我应该删除“testingweb”上返回的301吗?如果需要将请求重定向到另一个URL,则只需要返回指令——因此,如果希望在默认服务器块中结束的请求转到WordPress设置所在的
testingweb
,则将返回保留在默认配置中。但是,如果您有规则(位置块)来处理请求,则在
testingweb
中不需要它。您的
testingweb
配置是否适合您的WordPress站点?@kchan OK,我稍后再试。是的,我可以通过testingweb.com/www而不是testingweb.com访问Wordpress网站。谢谢您的配置,但它仍然不起作用,当我访问(http://)devdevdev.com时,它总是从/usr/share/nginx/html重定向到index.html。问题解决了。它是由SSL服务器块中错误的
位置/{..}
引起的。非常感谢您的帮助@kchan