fragen stichworte

Nginx Reverse Proxy Apache-URL ohne Umschreiben und https-Umschreiben

Ich habe eine Nginx + Apache-Konfiguration. Ich bin sehr neu in Nginx und versuche schon lange, es zu lernen.

Zuerst möchte ich eine grundlegende Umschreibung durchführen. Nach meinem Verständnis, wenn Nginx als Reverse Proxy verwendet wird, sollte .htaccess von Apache weiterhin funktionieren. Leider - mein Verständnis davon war nicht genau richtig - einige Teile funktionieren und andere scheinen es nicht zu sein.

Also habe ich versucht, mit .htaccess

ein grundlegendes Umschreiben durchzuführen
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?index.*/fp/[P]

Ich finde, dass die Verwendung des [P] -Flags in .htaccess anstelle eines normalen Neuschreibens dazu führt, dass/index.html nicht gefunden wird (was keine index.html im gesamten Code enthält) Site so eindeutig, dass es nicht gefunden werden kann).

Ich habe auch versucht, das [L] -Flag zu verwenden, aber anstelle der stillschweigenden Weiterleitung, wie ich es erwarten würde, wurde stattdessen eine Weiterleitung durchgeführt, sodass der Benutzer/fp/in der Adressleiste sehen konnte - nicht das Ergebnis, nach dem ich gesucht hatte.

Also - ich habe die Weiterleitung in die Nginx-Konfiguration verschoben. Das schien gut zu funktionieren.

Die Nginx-Weiterleitung, die ich gemacht habe, war sehr einfach mit einer if-Anweisung

   if ($uri = '/'){
        rewrite//fp/break;
    }

Bei dieser Weiterleitung werden nur Weiterleitungen auf/index.php oder andere Dateien umgeleitet.

Weiter habe ich eine Datei namens/login.php. Ich möchte einen Benutzer an https:// weiterleiten, wenn über http://

darauf zugegriffen wird

Also habe ich versucht, ein Apache-Schema mit $_SERVER['REQUEST_SCHEME']; zu überprüfen. Das Problem ist, dass http zurückgegeben wird, ob es https:// oder http://

ist

Die login.php befindet sich in/

Wie kann ich also den http dazu bringen, nur auf der login.php-Seite zu https umzuleiten.

Ich sollte auch beachten, dass ich versucht habe, mit .htaccess eine Umleitung von http zu https durchzuführen, da der Server jedoch http und niemals https zurückgibt, was zu einer Endlosschleife führte.

Abgesehen davon, warum führt das Flag "Apache .htaccess [P]" dazu, nach einer index.html zu suchen. Warum werden Silect-Weiterleitungen plötzlich öffentlich?

Wenn ich meine Configs anzeigen muss, sagen Sie mir bitte welche: :) ​​

AKTUALISIERUNG AUF KONFIGURIEREN

nginx.conf

server {
proxy_pass_request_headers      on;
index index.php;
listen      192.227.210.138:80;
server_name adsactlyhits.com www.adsactlyhits.com;
error_log /var/log/apache2/domains/adsactlyhits.com.error.log error;

location/{
    if ($uri = '/'){
        rewrite//fp/break;
    }
    proxy_pass      http://192.227.210.138:8080;
    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
        root          /home/adsactly/web/adsactlyhits.com/public_html;
        access_log    /var/log/apache2/domains/adsactlyhits.com.log combined;
        access_log    /var/log/apache2/domains/adsactlyhits.com.bytes bytes;
        expires        max;
        try_files      $uri @fallback;
    }
}

location/error/{
    alias  /home/adsactly/web/adsactlyhits.com/document_errors/;
}

location @fallback {
    proxy_pass      http://192.227.210.138:8080;
}
location ~/\.svn/ {return 404;}
location ~/\.git/ {return 404;}
location ~/\.hg/  {return 404;}
location ~/\.bzr/ {return 404;}

include/home/adsactly/conf/web/nginx.adsactlyhits.com.conf*;
}

snginx.conf

server {
listen      192.227.210.138:443;
server_name adsactlyhits.com www.adsactlyhits.com;
ssl         on;
ssl_certificate     /home/adsactly/conf/web/ssl.adsactlyhits.com.pem;
ssl_certificate_key /home/adsactly/conf/web/ssl.adsactlyhits.com.key;
error_log /var/log/apache2/domains/adsactlyhits.com.error.log error;

location/{
    if ($uri = '/'){
        rewrite//fp/break;
    }

    proxy_pass      http://192.227.210.138:8080;
    proxy_cache cache;
    proxy_cache_valid 15m;
    proxy_cache_valid 404 1m;
    proxy_no_cache $no_cache;
    proxy_cache_bypass $no_cache;
    proxy_cache_bypass $cookie_session $http_x_update;

    location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
        proxy_cache    off;
        root          /home/adsactly/web/adsactlyhits.com/public_html;
        access_log    /var/log/apache2/domains/adsactlyhits.com.log combined;
        access_log    /var/log/apache2/domains/adsactlyhits.com.bytes bytes;
        expires        max;
        try_files      $uri @fallback;
    }
}

location/error/{
    alias  /home/adsactly/web/adsactlyhits.com/document_errors/;
}

location @fallback {
    proxy_pass      http://192.227.210.138:8080;
}

location ~/\.ht    {return 404;}
location ~/\.svn/ {return 404;}
location ~/\.git/ {return 404;}
location ~/\.hg/  {return 404;}
location ~/\.bzr/ {return 404;}

include/home/adsactly/conf/web/nginx.adsactlyhits.com.conf*;
}

http://theurl.com/test.php

<?php echo $_SERVER['REQUEST_SCHEME']; ?>

gibt zurück: http

https://theurl.com/test.php

<?php echo $_SERVER['REQUEST_SCHEME']; ?>

gibt Folgendes zurück: http

antworten

So for starters, how can I get the http to redirect to https only on the login.php page

Bei dem Schlüssel handelt es sich um unterschiedliche Serverblöcke für http und https. Wenn Sie von einem einzelnen Serverblock aus dienen, haben Sie weniger Kontrolle. So etwas sollte funktionieren.

server {
  server_name example.com;
  listen 80; 

  location = login.php {
    return 302 https://example.com/login.php;
  }
}

server {
  server_name example.com;
  listen 443 ssl;

  # define any locations required
}

Größeres Bild: Sie sollten Ihre gesamte Website über https bedienen, um diese Probleme zu vermeiden, es sei denn, es gibt einen sehr guten Grund, weshalb Sie http verwenden müssen. Ihre Anwendung muss möglicherweise wissen, dass die Site über http und https segmentiert ist, um diese Einrichtung zu unterstützen.

Außerdem sind Nginx und Apache normalerweise nicht erforderlich. Nginx kann die meisten Aufgaben übernehmen, die Apache ausführen kann, und die Verwendung von beidem erhöht die Komplexität.

Jedes Mal, wenn Sie in Nginx "if" verwenden müssen, sollten Sie über den Nginx-Artikel "if is böse" nachdenken. Ich benutze if, aber nur, um Variablen für Steuerungs-Caching-Anweisungen festzulegen, nicht für kritische oder flussbezogene Elemente. Sie sollten möglichst "if" verwenden.

Aktualisieren

Dieser Artikel zeigt, wie Sie Header wie Protokoll an die nächste Schicht weiterleiten, damit das ursprüngliche Protokoll erkannt wird. Sie sollten Apache vollständig loswerden und Nginx PHP mit php-fpm aufrufen.

location/{
  proxy_set_header HOST $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_pass http://example.com/new/prefix;
}

Entfernen der Wenn-Weiterleitung

Stattdessen

location/{
  if ($uri = '/'){
    rewrite//fp/break;
  }
 //etc
}

Sie könnten so etwas versuchen. Der Gleichheitsoperator ist ein exakter Übereinstimmungsoperator. Dies führt zu einer besseren Leistung (geringfügig) und zuverlässigerem Betrieb.

location =/{
    rewrite//fp/break;
}

location/{
 //etc
}

Ich habe mich nicht selbst umgeschrieben, daher weiß ich nicht, ob dies der beste Weg ist, um das zu tun, was Sie versuchen.