非 www 或非 https 转发 Nginx 和 Magento 后端

非 www 或非 https 转发 Nginx 和 Magento 后端

我正在使用以下 Nginx 配置块

server {
    listen 80;
    server_name MyDomain.co.uk www.MyDomain.co.uk *.MyDomain.co.uk;
    return 301 https://www.MyDomain.co.uk$request_uri;
       }

server {
    listen 443;
    server_name MyDomain.co.uk www.MyDomain.co.uk *.MyDomain.co.uk;
    access_log /var/www/vhosts/MyDomain.co.uk/logs/access.log;
    error_log /var/www/vhosts/MyDomain.co.uk/logs/error.log;
    root /var/www/vhosts/MyDomain.co.uk/httpdocs;

    ssl on;
    ssl_certificate      /etc/nginx/ssl/MyDomain.co.uk.crt;
    ssl_certificate_key  /etc/nginx/ssl/MyDomain.co.uk.key;
    ssl_protocols        TLSv1.1 TLSv1.2;
...
...
...
}

这是为了实现通过以下方式访问我网站的所有流量

  • http://MyDomain.co.uk
  • http://www.MyDomain.co.uk
  • https://MyDomain.co.uk

应该总是被转发,https://www.MyDomain.co.uk但我有两个问题

  1. 一切都很好,但https://MyDomain.co.uk从未转发,https://www.MyDomain.co.uk不知道为什么,但可能是因为我的证书仅对有效www.MyDomain.co.uk,而对域无效MyDomain.co.uk?但如果我没错的话,我已经在这个论坛上看到其他帖子,用户正在实现这一点?

  2. 在对 Nginx 块配置进行上述更改以将非 https 转发到 https 并将非 www 转发到 www 后,由于某种原因,我的 Magento 后端无法正常工作,我可以正常登录到后端,但是当我尝试执行任何操作(例如刷新缓存或任何其他功能)时,它总是显示以下内容,并且什么也没做 magento_backend_issue

是不是因为Nginx的大部分设置都是在SSL阻止下?

答案1

编辑答案以包含完整配置。

https://MyDomain.co.uk不会转发,https://www.MyDomain.co.uk因为您MyDomain.co.ukhttps块中的域没有任何重定向。

您应该从当前监听端口的块中删除MyDomain.co.uk和,并添加以下块:*.MyDomain.co.ukserver443

server {
    listen 80;
    server_name MyDomain.co.uk www.MyDomain.co.uk *.MyDomain.co.uk;
    return 301 https://www.MyDomain.co.uk$request_uri;
}

server {
    listen 443;

    server_name MyDomain.co.uk *.MyDomain.co.uk;
    ssl on;
    ssl_certificate      /etc/nginx/ssl/MyDomain.co.uk.crt;
    ssl_certificate_key  /etc/nginx/ssl/MyDomain.co.uk.key;
    ssl_protocols        TLSv1.1 TLSv1.2;

    return 301 https://www.MyDomain.co.uk$request_uri;
}

server {
    listen 443;
    server_name www.MyDomain.co.uk;
    access_log /var/www/vhosts/MyDomain.co.uk/logs/access.log;
    error_log /var/www/vhosts/MyDomain.co.uk/logs/error.log;
    root /var/www/vhosts/MyDomain.co.uk/httpdocs;

    ssl on;
    ssl_certificate      /etc/nginx/ssl/MyDomain.co.uk.crt;
    ssl_certificate_key  /etc/nginx/ssl/MyDomain.co.uk.key;
    ssl_protocols        TLSv1.1 TLSv1.2;
}

这样,您将拥有一个server用于重定向其他域的块,然后拥有一个server处理请求的主块。

因此,您有三个虚拟主机:

1) http,将所有请求重定向到www.MyDomain.co.uk 2) https,将请求重定向MyDomain.co.uk*.MyDomain.co.uk3 www.MyDomain.co.uk )https以处理最终的请求www.MyDomain.co.uk

相关内容