Nginx重定向到www

时间:2016-11-02 17:05:07

标签: nginx

再次出现nginx重定向问题。我需要我的网站只能通过https访问,并且始终使用子域名www(或app或api)。以下配置是否可以接受https://example.com(没有www)?因为这就是我现在所看到的,无法解释原因......我只是补充一点,nginx配置上没有其他服务器部分。

server {
    listen 80;
    server_name ~^(?<subdomain>www|app|api)\.example\.com$;
    index index.html index.htm;
    return         301 https://$subdomain.example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name ~^(?<subdomain>www|app|api)\.example\.com$;
    root /var/www/html/pathToMyWebsite;
    index index.php;
}

编辑:这是我最终使用的感谢@ivan:

# Redirects http://example.com & https://example.com to https://www.example.com
server {
    listen 80;
    listen 443 ssl;  # Here is the trick - listen both 80 & 443.

    # other ssl related stuff but without "ssl on;" line.

    server_name example.com;
    return 301 https://www.example.com$request_uri;
}
server {
    listen 80;
    server_name ~^(?<subdomain>www|app|api)\.example\.com$;
    index index.html index.htm;
    return         301 https://$subdomain.example.com$request_uri;
}
server {
    listen 443 default_server ssl;
    server_name ~^(?<subdomain>www|app|api)\.example\.com$;
    root /var/www/html/pathToMyWebsite;
    index index.php;
}

注意&#34; default_server&#34;我添加了listen 443 default_server ssl;

1 个答案:

答案 0 :(得分:2)

首先,在nginx配置中使用regexp通常不是一个好的解决方案。由于regexp引入了冗余复杂性,因此复制和粘贴配置块或使用include语句几乎总是更合理。当然,这是一种权衡使用的方式。

但是,我的配置中的使用模式非常相似:

# Redirects http://example.com & https://example.com to https://www.example.com
server {
    listen 80;
    listen 443 ssl;  # Here is the trick - listen both 80 & 443.

    # other ssl related stuff but without "ssl on;" line.

    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

# Redirects http://*.example.com to https://*.example.com
server {
    listen 80;
    server_name ~^.+\.example\.com$;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name ~^.+\.example\.com$;
    ssl on;
    # ...
}