子域名并使用nginx重定向

时间:2014-04-01 11:50:03

标签: nginx

我在example.com上有我的博客设置

server {
    listen   8082; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name example.com;

从www重定向。非www我也有这个块:

server {
    listen      8082;
    server_name www.example.com;
    return          301 http://example.com$request_uri; 
}

这也有效,但后来我想添加一个子域名:“api.example.com”。首先,我尝试在网站中添加另一个文件 - 可用和符号链接到已启用网站。但这不起作用,第二个文件根本没有触发。

接下来,我在第一个文件中添加了子域作为服务器块。那很有效。但现在每个子域都会导致api.example.com。

首先我不明白“test.example.com”如何导致这个服务器块:

server {
    listen   8082; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name api.example.com;
}

因为server_name是 api .example.com,而test.example.com是另一个子域。我如何让未指定的每个子域导致主页或自定义错误页面?

1 个答案:

答案 0 :(得分:1)

首先,将3个域/子域服务器块分成三个不同的文件可能是更好的组织实践。据我所知,你的nginx被配置为从启用站点的文件中读取.conf文件。创建从启用站点到站点的链接的可能性只是让您可以在需要时轻松禁用子域/子域,而无需删除配置文件(只需删除符号链接)。这很好。但是您的配置可能有问题。您可以尝试从此示例nginx.conf(source):

# Generic startup file.
user {user} {group};

#ususally equal to number of CPU's you have. run command "grep processor /proc/cpuinfo | wc -l" to find it
worker_processes  2;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

# Keeps the logs free of messages about not being able to bind().
#daemon     off;

events {
    worker_connections  1024;
}

http {
#   rewrite_log on;

    include mime.types;
    default_type       application/octet-stream;
    access_log         /var/log/nginx/access.log;
    sendfile           on;
#   tcp_nopush         on;
    keepalive_timeout  3;
#   tcp_nodelay        on;
#   gzip               on;
        #php max upload limit cannot be larger than this       
    client_max_body_size 13m;
    index              index.php index.html index.htm;

    # Upstream to abstract backend connection(s) for PHP.
    upstream php {
                #this should match value of "listen" directive in php-fpm pool
        server unix:/tmp/php-fpm.sock;
#       server 127.0.0.1:9000;
    }

    include sites-enabled/*;
}

如果您不想/需要更改所有nginx.conf文件,请查看最后一行(包含)。

然后,只需在已启用网站的位置创建每个服务器(vhost)配置文件。

关于配置子域的问题,请验证您是否正在为子域创建相应的DNS条目。这是显而易见的,但请仔细检查它,因为你的nginx配置似乎是正确的。然后,使用不同的文件创建服务器块:

server {
    listen   8082; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name api.example.com;
    #the rest of your server config goes here.

}