मैं वर्तमान में एक रिपॉजिटरी से 3 में 3 एप्लिकेशन को अलग करने की कोशिश कर रहा हूं, लेकिन url संरचना को ध्यान में रखते हुए, इसलिए मूल रूप से एक ही डोमेन के तहत अलग-अलग स्थानों को अलग-अलग अनुप्रयोगों द्वारा वितरित किया जाना है।
जो मैं संघर्ष कर रहा हूं, वह यह है कि किसी एक एप्लिकेशन को गैर-मौजूद urls के लिए कमबैक होना चाहिए, इसलिए यदि पहला मेल नहीं खाता है, और दूसरा नहीं है, तो तीसरे को अनुरोध को संभालना चाहिए
मुझे जो संरचना मिली है वह है:
/ etc / nginx / sites-enable / main_site, यहाँ में, server_name और लॉग के अलावा मुझे मिला है include /etc/nginx/subsites-enabled/*
, जहाँ मुझे 3 कॉन्फ़िगरेशन फ़ाइलें मिली हैं, प्रत्येक ऐप के लिए एक।
3 कॉन्फिग फाइलों में से प्रत्येक में एक लोकेशन ब्लॉक होता है।
मैंने रेगेक्स में नकारात्मक रूप देखने की कोशिश की है (मूल रूप से अन्य एप्लिकेशन हैंडल को हार्डकोड करने की कोशिश कर रहा है) लेकिन असफल रहा।
इसलिए, संक्षेप में:
/ / और समुदाय /etc/nginx/subsites-enabled/example.org/home (कुछ पर्ल स्क्रिप्ट) द्वारा दिया जाना चाहिए
/ समाचार /etc/nginx/subsites-enabled/example.org/news (वर्डप्रेस) द्वारा वितरित किया जाना चाहिए
बाकी सब कुछ /etc/nginx/subsites-enabled/example.org/app (केक ऐप) द्वारा दिया जाना चाहिए
पर्ल बिट ठीक काम करता है। मुझे जो समस्या हो रही है, वह यह है कि ऐप समाचार ले रहा है (शायद यह मेल खाता है। *), मैंने विभिन्न विकल्पों की कोशिश की है (मैं 2 दिनों के लिए इस पर रहा हूं) लेकिन उनमें से किसी ने भी सभी समस्याओं को हल नहीं किया (कभी-कभी स्थैतिक संपत्ति काम नहीं करेगी, आदि)।
मेरा विन्यास है:
/etc/nginx/sites-enabled/example.org:
server {
listen 80;
server_name example.org;
error_log /var/log/nginx/example.org.log;
include /etc/nginx/subsites-enabled/example.org/*;
}
/etc/nginx/subsites-enabled/example.org/home:
location = / {
rewrite ^.*$ /index.pl last;
}
location ~* /community(.*) {
rewrite ^.*$ /index.pl last;
}
location ~ \.pl {
root /var/www/vhosts/home;
access_log /var/log/nginx/home/access.log;
error_log /var/log/nginx/home/error.log;
include /etc/nginx/fastcgi_params;
fastcgi_index index.pl;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/home$fastcgi_script_name;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
/ Etc / ngins / सबसाइट सक्षम / समाचार
location /news {
access_log /var/log/nginx/news/access.log;
error_log /var/log/nginx/news/error.log debug;
error_page 404 = /news/index.php;
root /var/www/vhosts/news;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/news$fastcgi_script_name;
}
}
/ Etc / nginx / सबसाइट सक्षम / ऐप्स:
location ~ .* {
access_log /var/log/nginx/app/access.log;
error_log /var/log/nginx/app/error.log;
rewrite_log on;
index index.php;
root /var/www/vhosts/app/app/webroot;
if (-f $request_filename) {
expires 30d;
break;
}
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/app/app/webroot$fastcgi_script_name;
}
}
location ^~ /news
। बी) आपके ऐप ब्लॉक के लिए, आपको ऐसा करने में सक्षम होना चाहिए location /
(यह वैसा नहीं है location = /
, बल्कि कुछ मामलों में (विशेष रूप से रेगेक्स) से पहले ही सब कुछ मिलान नहीं करना चाहिए।) आदेश मायने रखता है - आप 3 को संयोजित करना चाह सकते हैं। सही क्रम में ब्लॉक के साथ एक एकल फ़ाइल में फ़ाइलें। इसके अलावा, try_files का उपयोग करें !-e
। अंत में wiki.nginx.org/HttpCoreModule#location देखें ।
@
जो आपके डिफ़ॉल्ट एप्लिकेशन को मैप करता है। आप एक एरर_पेज भी सेट कर सकते हैं, जो 404 नाम वाले स्थान पर मैप करता है।