nginx – 无效的子域被重定向到另一个域

前端之家收集整理的这篇文章主要介绍了nginx – 无效的子域被重定向到另一个域前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在同一台服务器上托管了两个域.在DNS记录中,我有通配符(*)两个域的记录都指向服务器.

所以我期待xyz.domain1.com解析为domain1.com
和xyz.domain2.com到domain2.com.

但是目前除了domain2.com上的www子域之外的所有内容都将重定向到domain1.com.

我为这两个域提供了相同的Nginx配置,所以我不明白是什么原因引起的.这是我的Nginx配置看起来像 –

  1. user Nginx;
  2. worker_processes 1;
  3. error_log /var/log/Nginx/error.log warn;
  4. pid /var/run/Nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/Nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /dev/stdout main;
  15. sendfile on;
  16. keepalive_timeout 65;
  17. # Listen for non-HTTPS requests and redirect them to HTTPS
  18. server {
  19. server_name www.domain1.com domain1.com;
  20. return 301 https://domain1.com$request_uri;
  21. }
  22. # Listen for www requests with HTTPS and redirect them to non www site
  23. server {
  24. listen 443 ssl;
  25. server_name www.domain1.com;
  26. ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
  27. ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;
  28. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  29. ssl_ciphers HIGH:!aNULL:!MD5;
  30. return 301 https://domain1.com$request_uri;
  31. }
  32. # Listen for non-www HTTPS requests and serve the app
  33. server {
  34. listen 443 ssl;
  35. #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  36. server_name domain1.com api.domain1.com;
  37. ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
  38. ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;
  39. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  40. ssl_ciphers HIGH:!aNULL:!MD5;
  41. location ^~ /.well-known/ {
  42. root /usr/share/Nginx/html;
  43. allow all;
  44. }
  45. location / {
  46. root /var/www/domain1;
  47. }
  48. }
  49. # Listen for non-HTTPS requests and redirect them to HTTPS
  50. server {
  51. server_name www.domain2.com domain2.com;
  52. return 301 https://domain2.com$request_uri;
  53. }
  54. # Listen for www requests with HTTPS and redirect them to non www site
  55. server {
  56. listen 443 ssl;
  57. server_name www.domain2.com;
  58. ssl_certificate /etc/letsencrypt/live/www.domain2.com/fullchain.pem;
  59. ssl_certificate_key /etc/letsencrypt/live/www.domain2.com/privkey.pem;
  60. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  61. ssl_ciphers HIGH:!aNULL:!MD5;
  62. return 301 https://domain2.com$request_uri;
  63. }
  64. # Listen for non-www HTTPS requests and serve the app
  65. server {
  66. listen 443 ssl;
  67. #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  68. server_name domain2.com;
  69. ssl_certificate /etc/letsencrypt/live/www.domain2.com/fullchain.pem;
  70. ssl_certificate_key /etc/letsencrypt/live/www.domain2.com/privkey.pem;
  71. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  72. ssl_ciphers HIGH:!aNULL:!MD5;
  73. location ^~ /.well-known/ {
  74. root /usr/share/Nginx/html;
  75. allow all;
  76. }
  77. location / {
  78. root /var/www/domain2;
  79. }
  80. }
  81. }

如何将域保持分离,以便每个域的子域都重定向到正确的域?

最佳答案
您必须为每个域包含通配符server_name条目,以选择要重定向到的域.否则,将将未知的server_names分派到第一个条目(在这种情况下,重定向到domain1.com).

将* .domain2.com添加到server_name www.domain2.com的行,它应该正确地拆分domain2.com子域.

猜你在找的Nginx相关文章