Nginx反向代理到Apache2-不工作-重定向太多



一开始,我想道歉,但我是Nginx的新手。

我有一个VPS,我有一些PHP/Symfony项目(托管在Apache2中(。现在我需要在VPS中添加一个新的应用程序(在Vue中,尤其是NuxtJS(。

所以我决定设置Nginx与Apache2的反向代理。我的想法是,在Nginx上可以运行NuxtJS应用程序,而PHP应用程序仍然可以在Apache2上。

我遵循了本教程:https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-web-server-and-reverse-proxy-for-apache-on-one-ubuntu-18-04-server

  • 首先我更改了/etc/apache2/ports.conf文件。侦听80到侦听8080并删除443 SSL选项。在这个文件中现在只有Listen 8080
  • 然后我更改了/etc/apache/sites-available中的配置。我将PHP项目的现有配置编辑为:
  1. 删除SSL配置
  2. 编辑CCD_ 4和CCD_;将*80改写为*8080
  3. 关于apache中域的sudo 2 dissite 2
  • 接下来我安装了Nginx,取消了/etc/nginx/nginx.conf中gzip选项的注释,并添加了proxy_cache_path /var/cache levels=1:2 keys_zone=reverse_cache:60m inactive=90m max_size=1000m;
  • 之后,我删除了/etc/nginx/sites-available中的default文件,并在同一目录中创建了一个apache文件
  • ln -s apache /etc/nginx/sites-enabled链接了一个apache文件
  • 拒绝使用sudo iptables -I INPUT -p tcp --dport 8080 ! -s your_server_ip -j REJECT --reject-with tcp-reset直接访问Apache

Nginx配置文件Apache如下所示:

server {
server_name my_domain.cz www.my_domain.cz;
root /var/www/my_domain/web;
index index.php app.php index.htm index.html;
location / {
try_files $uri $uri/ /app.php;
}
location ~ .php$ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /.ht {
deny all;
}   
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/my_domain.cz/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/my_domain.cz/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
server_name adminer.my_domain.cz www.adminer.my_domain.cz;
root /var/www/adminer;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ .php$ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ /.ht {
deny all;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/adminer.my_domain.cz/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/adminer.my_domain.cz/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

proxy_pass选项中,我尝试了localhost127.0.0.1或我的服务器公共IP。这些选项都不起作用。

Nginx正在运行(sudo nginx -t可以(,Apache2也在运行。当我试图访问我的网站时,我得到了ERR_TOO_MANY_REDIRECTS。我绝望了。我发现所有的建议都无效。

ERR_TOO_MANY_REDIRECTS错误基本上意味着您有一个重定向循环。由于您正在重新配置服务器,因此可能有几个原因导致循环。首先,只需确保删除浏览器中的所有cookie和缓存,以及服务器上的缓存(如果有的话(。

如果这不能解决循环,可能是由于重定向到apachephp服务器上的.htaccess或apache配置文件中的https引起的。

如今,大多数服务器都被配置为将所有流量从http重定向到https。在.htaccess文件中,您可能会发现以下内容:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} 

基本上,这意味着所有不是https的请求都将重定向到https。

由于您已将apache服务器重新配置为http,并且来自Nginx反向代理的所有请求都将是http,因此服务器将向浏览器发送重定向请求(301(。浏览器将向Nginx发送一个https请求,Nginx将其作为http请求转发给Apache,Apache将重定向到浏览器的https。这将是一个无限循环。浏览器识别出这个循环并将抛出ERR_TOO_MANY_REDIRECTS

.htaccess或apache虚拟主机配置中删除重定向到https可能会解决您的问题。

最新更新