{"id":14,"date":"2017-02-24T14:49:54","date_gmt":"2017-02-24T13:49:54","guid":{"rendered":"https:\/\/bayer-in.de\/wordpress\/?p=14"},"modified":"2017-02-24T14:49:54","modified_gmt":"2017-02-24T13:49:54","slug":"wordpress-behind-a-reverse-proxy","status":"publish","type":"post","link":"https:\/\/bayer-in.de\/blog\/alex\/2017\/02\/24\/14\/","title":{"rendered":"Synology DS hinter einem Reverse-Proxy"},"content":{"rendered":"<p>Nach dem Michael in der Schule im Informatik-Untericht mit HTML angefangen hat, haben wir Zuhause auf einem Raspberry Pi einen eigenen Web-Server aufgesetzt, um verschiedene Sachen ausprobieren zu k\u00f6nnen. Nun wollten wir, dass nicht nur unser Raspberry Pi aus dem Internet erreichbar ist, sondern auch dieser Blog, der auf einer Synology Disk Station l\u00e4uft. Die\u00a0Portweiterleitung am Router kann aber nur auf eine IP-Adresse konfiguriert werden. Die L\u00f6sung f\u00fcr das Problem ist ein Reverse-Proxy. Dieser kann anhand der URL entscheiden an welchen Server die Anfrage weitergeleitet werden soll. Au\u00dferdem bietet ein\u00a0Reverse-Proxy zus\u00e4tzliche Sicherheit, da\u00a0die Disk Station dann nicht direkt aus dem Internet erreicht werden kann. So haben wir gleich den lighttpd-Server auf dem Raspberry Pi als Reverse-Proxy konfiguriert:<!--more--><\/p>\n<pre>pi$ sudo lighty-enable-mod proxy\npi$ sudo nano \/etc\/lighttpd\/conf-enabled\/10-proxy.conf\n\n$HTTP[\"url\"] =~ \"^\/wordpress(.*)$\" {\n proxy.server = ( \"\" =&gt; ( ( \"host\" =&gt; \"192.168.1.2\", \"port\" =&gt; 80 ) ) )\n }\n\n$ sudo systemctl restart lighttpd.service<\/pre>\n<p>Allerdings funktioniert es gut nur, wenn wir eine unverschl\u00fcsselte Verbindung (http:\/\/&#8230;) aufbauen. Sobald man\u00a0http<span style=\"color: #ff0000;\">s<\/span>:\/\/&#8230; verwendet, bekommt man im Browser eine Warnung \u00fcber &#8222;mixed content&#8220; und die Seite wird nicht richtig angezeigt. Mit anderen Diensten auf der Disk Station (z.B. Photo Station) funktioniert es dagegen auch \u00fcber eine verschl\u00fcsselte Verbindung. Eine Netzwerk-Analyse mittels Wireshark hat gezeigt, dass eine Antwort vom nginx und nicht von Apache-Server (auf dem eigentlich der WordPress l\u00e4uft) kommt:<\/p>\n<pre>syno$ sudo netstat -tulpn | grep :80\n tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11735\/nginx: master<\/pre>\n<p>Das hei\u00dft, dass auf der Synology ein nginx-Server als Reverse-Proxy l\u00e4uft und wir einen Reverse-Proxy hinter einem Anderen haben. \u00a0Aber wohin wird der WordPress-Traffic von nginx weitergeleitet:<\/p>\n<pre>syno$ cd \u00a0\/volume1\/@appstore\/WordPress\/synology_added\/etc\/\nsyno$ cat www.WordPress.conf\n location ^~ \/wordpress {\n include proxy.conf;\n proxy_pass \u00a0http:\/\/127.0.0.1:914;\n proxy_read_timeout 3600s;\n }\n\nsyno$ sudo netstat -tulpn | grep :914\n tcp 0 0 0.0.0.0:914 0.0.0.0:* LISTEN 22223\/httpd22<\/pre>\n<p>So k\u00f6nnen wir unsere http-Anfragen an den Port 914 direkt vom Raspberry weiterleiten:<\/p>\n<pre>pi$ sudo nano \/etc\/lighttpd\/conf-enabled\/10-proxy.conf\n\n$HTTP[\"url\"] =~ \"^\/wordpress(.*)$\" {\n proxy.server=(\"\"=&gt;((\"host\"=&gt;\"192.168.1.2\",\"port\"=&gt;914)))\n }\n\npi$ sudo systemctl restart lighttpd.service<\/pre>\n<p>Allerdings muss man den Apache-Server umkonfigurierten, dass dieser nicht nur auf Anfragen vom lokalen nginx lauscht, sondern auch auf die von dem Raspberry. So \u00e4ndere ich\u00a0<em>httpd22.conf:<\/em><\/p>\n<pre>syno$ sudo vi httpd22.conf\n ServerRoot \"\/usr\/local\/etc\/apache22\"\n Listen 0.0.0.0:914<\/pre>\n<p>und starte\u00a0den Apache-Server neu:<\/p>\n<pre>syno$ sudo reload pkg-apache22<\/pre>\n<p>Folgendes sollte noch in die\u00a0wp-config.php hinzugef\u00fcgt werden:<\/p>\n<pre>syno$ sudo vi \/volume1\/web\/wordpress\/wp-config.php\n define('FORCE_SSL_ADMIN', true);\n if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &amp;&amp; $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')\n $_SERVER['HTTPS']='on';<\/pre>\n<p>Quelle:<em> <a href=\"https:\/\/guides.wp-bullet.com\/fix-varnish-mixed-content-errors-cloudflare-ssl-wordpress\/\">https:\/\/guides.wp-bullet.com\/fix-varnish-mixed-content-errors-cloudflare-ssl-wordpress\/<\/a><\/em><\/p>\n<p>oder so:<\/p>\n<pre>\/** SSL *\/\n define('FORCE_SSL_ADMIN', true);\n \/\/ in some setups HTTP_X_FORWARDED_PROTO might contain\n \/\/ a comma-separated list e.g. http,https\n \/\/ so check for https existence\n if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)\n $_SERVER['HTTPS']='on';<\/pre>\n<p>Quelle:<em>\u00a0<a href=\"https:\/\/arstechnica.com\/information-technology\/2015\/05\/web-served-how-to-make-your-site-all-https-all-the-time-for-everyone\/\">https:\/\/arstechnica.com\/information-technology\/2015\/05\/web-served-how-to-make-your-site-all-https-all-the-time-for-everyone\/<\/a><\/em><\/p>\n<p>&#8230;und ein Test:<\/p>\n<pre>pi$ curl https:\/\/192.168.1.2:914\npi$ curl https:\/\/bayer-in.de\/wordpress\/<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Nach dem Michael in der Schule im Informatik-Untericht mit HTML angefangen hat, haben wir Zuhause auf einem Raspberry Pi einen eigenen Web-Server aufgesetzt, um verschiedene Sachen ausprobieren zu k\u00f6nnen. Nun wollten wir, dass nicht nur unser Raspberry Pi aus dem Internet erreichbar ist, sondern auch dieser Blog, der auf einer Synology Disk Station l\u00e4uft. Die\u00a0Portweiterleitung &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/bayer-in.de\/blog\/alex\/2017\/02\/24\/14\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eSynology DS hinter einem Reverse-Proxy\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[3,4,6,8],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-lighttpd","tag-nginx","tag-synology","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":0,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"wp:attachment":[{"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bayer-in.de\/blog\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}