ما هي أفضل طريقة لتشغيل Wordpress على نفس المجال مثل تطبيق Rails؟
-
01-07-2019 - |
سؤال
لدي تطبيق Rails قياسي يعمل عليه Nginx وMongrel http://mydomain.أحتاج إلى تشغيل مدونة Wordpress على http://mydomain.com/blog.أفضلي هو استضافة المدونة في Apache التي تعمل إما على نفس الخادم أو على مربع منفصل ولكني لا أريد أن يرى المستخدم خادمًا مختلفًا في عنوان URL.هل ذلك ممكن، وإذا لم يكن كذلك، فبماذا تنصح لتحقيق الهدف؟
المحلول
أعتقد أن حل جولهاردي أفضل مما يلي.ومع ذلك، في تطبيقي الخاص، أحب الاحتفاظ بالمدونة على خادم VPS منفصل عن موقع Rails (مشكلات فصل الذاكرة).لجعل المستخدم يرى نفس عنوان URL، يمكنك استخدام نفس خدعة الوكيل التي تستخدمها عادةً في إنشاء وكيل لمجموعة هجينة، باستثناء أنك وكيل للمنفذ 80 (أو أي شيء آخر) في صندوق آخر.سهل جدا.بالنسبة للمستخدم، يكون الأمر شفافًا تمامًا مثل وكيل mongrel - فهو فقط "يرى" استجابة NGINX على المنفذ 80 في المجال الخاص بك.
upstream myBlogVPS {
server 127.0.0.2:80; #fix me to point to your blog VPS
}
server {
listen 80;
#You'll have plenty of things for Rails compatibility here
#Make sure you don't accidentally step on this with the Rails config!
location /blog {
proxy_pass http://myBlogVPS;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
يمكنك استخدام هذه الخدعة لتشغيل Rails مع أي تقنية خادم تريدها، بالمناسبة.قم بالتوصيل مباشرةً إلى الخادم/المنفذ المناسب، وسيقوم NGINX بإخفائه عن العالم الخارجي.بالإضافة إلى ذلك، نظرًا لأن عناوين URL ستشير جميعها إلى نفس النطاق، يمكنك على ما يبدو دمج مدونة تعتمد على PHP ونظام تتبع يعتمد على Python وتطبيق Rails - طالما أنك تكتب عناوين URL الخاصة بك بشكل صحيح.
نصائح أخرى
في الواقع، نظرًا لأنك تستخدم Nginx، فأنت بالفعل في حالة جيدة ولا تحتاج إلى Apache.
يمكنك تشغيل PHP من خلال fastcgi (توجد أمثلة لكيفية القيام بذلك في ويكي Nginx)، واستخدم نمط مطابقة عنوان URL في تكوين Nginx لتوجيه بعض عناوين URL إلى Rails وأخرى إلى PHP.
فيما يلي مثال لتكوين Nginx لتشغيل مدونة WordPress من خلال PHP fastcgi (لاحظ أنني قمت أيضًا بإضافة Nginx المعادل لـ WordPress .htaccess، لذلك سيكون لديك أيضًا عناوين URL رائعة تعمل بالفعل مع هذا التكوين):
server {
listen example.com:80;
server_name example.com;
charset utf-8;
error_log /www/example.com/log/error.log;
access_log /www/example.com/log/access.log main;
root /www/example.com/htdocs;
include /www/etc/nginx/fastcgi.conf;
fastcgi_index index.php;
# Send *.php to PHP FastCGI on :9001
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001;
}
# You could put another "location" section here to match some URLs and send
# them to Rails. Or do it the opposite way and have "/blog/*" go to PHP
# first and then everything else go to Rails. Whatever regexes you feel like
# putting into "location" sections!
location / {
index index.html index.php;
# URLs that don't exist go to WordPress /index.php PHP FastCGI
if (!-e $request_filename) {
rewrite ^.* /index.php break;
fastcgi_pass 127.0.0.1:9001;
}
}
}
هذا هو ملف fastcgi.conf الذي قمت بتضمينه في التكوين أعلاه (أضعه في ملف منفصل بحيث يمكن لجميع ملفات تكوين المضيف الظاهري تضمينه في المكان المناسب، ولكن ليس عليك القيام بذلك):
# joelhardi fastcgi.conf, see http://wiki.codemongers.com/NginxFcgiExample for source
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;
لقد حدث أيضًا أنني فعلت ما يقترحه موقع Nginx wiki، واستخدمت Spawn-fcgi من Lighttpd باعتباره CGI-spawner الخاص بي (Lighttpd عبارة عن تجميع سريع جدًا بدون تبعيات غريبة، لذا فهو شيء سريع وسهل التثبيت)، ولكن يمكنك أيضًا استخدم برنامج نصي قصير/Perl لذلك.
الإجابات أعلاه تتناول سؤالك بشكل جميل.
سيكون بديل FCGI هو استخدام php-fpm.المستندات قليلة بعض الشيء ولكنها تعمل بشكل جيد.
نجينكس الآن يوفر برنامج نصي للقيام بذلك إذا كنت في بيئة EC2/AWS.
قد يكون قابلاً للتكيف بسهولة مع وضعك.إنه سهل الاستخدام.
يبدو لي أن شيئًا مثل مناور إعادة الكتابة سيفعل ما تريد.آسف ليس لدي المزيد من التفاصيل - فقط أفكر بصوت عالٍ :)