यदि आप एक वेबसाइट या API चला रहे हैं, तो संभावना है कि आपको डोमेन, उपडोमेन और उस हमेशा परेशान करने वाले CORS मुद्दे से निपटना पड़ेगा। चलिए इसे चरण-दर-चरण समझते हैं और सब कुछ सुचारू रूप से सेट करते हैं।
Nginx में डोमेन और उपडोमेन सेट करना
Nginx में कई डोमेन और उपडोमेन को कॉन्फ़िगर करना बहुत आसान है। आपको बस सर्वर ब्लॉक्स (जिसे वर्चुअल होस्ट भी कहते हैं) सेट करना है ताकि Nginx को बताया जा सके कि कौन सा डोमेन कहाँ इंगित करना चाहिए।
Nginx का उपयोग एक रिवर्स प्रॉक्सी के रूप में
इस मामले में, हम Nginx का उपयोग एक रिवर्स प्रॉक्सी के रूप में कर रहे हैं। इसका मतलब है कि Nginx आने वाले अनुरोधों को प्राप्त करेगा और उपडोमेन के आधार पर उन्हें उचित बैकएंड सर्वरों की ओर अग्रेषित करेगा। यह सेटअप लोड बैलेंसिंग, सुरक्षा और अनुरोध प्रबंधन को केंद्रीकृत करने के लिए उपयोगी है।
HTTP को HTTPS पर रीडायरेक्ट करना
सुनिश्चित करने के लिए कि सभी ट्रैफ़िक सुरक्षित रूप से HTTPS के माध्यम से रूट किया गया है, पोर्ट 80 से 443 पर रीडायरेक्ट सेट करें:
server {
listen 80;
server_name example.com *.example.com;
return 301 https://$host$request_uri;
}
डोमेन और कई उपडोमेन को डायनामिक प्रॉक्सी पास के साथ संभालना
यदि आप मुख्य डोमेन (example.com
) और कई उपडोमेन (api.example.com
, blog.example.com
, आदि) को डायनामिक रूप से संभालना चाहते हैं, तो आप उपडोमेन को निकाल सकते हैं और अनुरोधों को तदनुसार प्रॉक्सी कर सकते हैं:
server {
listen 443 ssl;
server_name *.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
set $subdomain "default";
if ($host ~* ^(.+?)\.example\.com$) {
set $subdomain $1;
}
location / {
proxy_pass http://backend.$subdomain.example.com;
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;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Authorization $http_authorization;
}
}
यह कॉन्फ़िगरेशन अनुरोध से उपडोमेन को डायनामिक रूप से निकालता है और अनुरोध को संबंधित बैकएंड सर्वर (backend.<subdomain>.example.com
) की ओर प्रॉक्सी करता है। इसके अतिरिक्त, यह सुनिश्चित करता है कि सभी आवश्यक हेडर सही तरीके से अग्रेषित हों।
अब, बस कॉन्फ़िगरेशन को सक्षम करें और Nginx को पुनरारंभ करें:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
बूम! आपका डोमेन और सभी उपडोमेन अब HTTPS और डायनामिक प्रॉक्सी के साथ काम कर रहे हैं।
Nginx में CORS (क्रॉस-ओरिजिन रिसोर्स शेयरिंग) से निपटना
CORS का क्या मामला है?
CORS वह चीज है जो आपके फ्रंटेंड को किसी अन्य डोमेन पर होस्ट किए गए API को कॉल करने से रोकती है। यदि आपका फ्रंटेंड app.example.com
पर है और आपका API api.example.com
पर है, तो आपको क्रॉस-ओरिजिन अनुरोधों की अनुमति देनी होगी।
Nginx में CORS सक्षम करना
आपके API को किसी अन्य डोमेन से अनुरोध स्वीकार करने के लिए, आपको Nginx में सही हेडर जोड़ने की आवश्यकता है।
सभी मूलों की अनुमति दें (हमेशा अनुशंसित नहीं)
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/nginx/ssl/api.example.com.crt;
ssl_certificate_key /etc/nginx/ssl/api.example.com.key;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
if ($request_method = OPTIONS) {
return 204;
}
}
}
यह आपके API को किसी भी व्यक्ति के लिए एक्सेस करने की अनुमति देता है, जो सार्वजनिक APIs के लिए ठीक है लेकिन निजी के लिए जोखिम भरा है।
केवल एक विशिष्ट डोमेन की अनुमति दें
क्या आप app.example.com
तक पहुंच को सीमित करना चाहते हैं? इसके बजाय ऐसा करें:
add_header 'Access-Control-Allow-Origin' 'https://app.example.com';
प्रीफ्लाइट अनुरोधों को संभालना
ब्राउज़र कभी-कभी एक OPTIONS
अनुरोध भेजते हैं वास्तविक API कॉल करने से पहले। यदि आप इसे संभाल नहीं करते हैं, तो चीजें टूट जाएंगी। यहाँ प्रीफ्लाइट अनुरोधों की अनुमति देने का तरीका है:
location / {
if ($request_method = OPTIONS) {
add_header 'Access-Control-Allow-Origin' 'https://app.example.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
return 204;
}
}
समापन
Nginx में डोमेन, उपडोमेन और CORS को सही तरीके से सेट करना बहुत बुरा नहीं है जब आप जानते हैं कि क्या समायोजित करना है। सही सेटअप के साथ, आप सिरदर्द से बच सकते हैं और अपने ऐप्स को सुचारू रूप से चलाते रह सकते हैं। खुश कोडिंग!