এনজিএনএক্স এইচটিটিপিএস এইচটিটিপি হিসাবে একই কনফিগারেশনের সাথে পরিবেশন করছে


194

দুটি এনগিনেক্স server {}ব্লক জুড়ে কনফিগারেশন নির্দেশিকা ভাগ করার কোনও উপায় আছে কি ? আমি নিয়মের সদৃশ হওয়া এড়াতে চাই, কারণ আমার সাইটের এইচটিটিপিএস এবং এইচটিটিপি বিষয়বস্তু ঠিক একই কনফিগারেশনের সাথে পরিবেশন করা হয়েছে।

বর্তমানে, এটি এর মতো:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

আমি কি এর লাইনে কিছু করতে পারি:

server {
  listen 80, 443;
  ...

  if(port == 443) {
    ssl on; #etc
  }
}

উত্তর:


262

আপনি এটির মতো একটি সার্ভার ব্লকে এটি একত্রিত করতে পারেন:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

অফিসিয়াল কীভাবে


6
আহ, আমার কোনও ধারণা ছিল না এনজিনক্স এসএসএল নির্দেশাবলী উপেক্ষা করতে যথেষ্ট বুদ্ধিমান ছিল যদি 80 বন্দর দিয়ে বোঝানো হয়। দুর্দান্ত!
ceejayoz

72
এনজিনেক্স হ'ল সব ধরণের WIN।
জাউদার হো

5
এবং যদি আপনার একটি সার্ভারে বেশ কয়েকটি সাইট থাকে তবে এটি উল্লেখ করা দরকার যে "ডিফল্ট" বাধ্যতামূলক নয়
লুচানিনভ

4
এত মার্জিত এটি ব্যাথা করে ...
অ্যালিক্স এক্সেল

3
এখানে কাজ করছে না ... "সাধারণ এইচটিটিপি অনুরোধটি এইচটিটিপিএস বন্দরে প্রেরণ করা হয়েছিল"
gcstr

87

গৃহীত উত্তরটি পরিষ্কার করতে, আপনাকে বাদ দিতে হবে

SSL on;

এবং আপনার 0.8.21 এর পরে nginx সংস্করণের জন্য কেবল নিম্নলিখিতটি প্রয়োজন

listen 443 ssl;

রেফারেন্স:

এনগিনেক্স ডক্স - একটি একক এইচটিটিপি / এইচটিটিপিএস সার্ভার কনফিগার করা


2
ধন্যবাদ! HTTP- তে কিছুই কাজ করছে না তা আমি বুঝতে পারি না। এসএসএল সরানো হচ্ছে; কাজ করছে.
ক্রিস কামিংস

26

আপনার পরামর্শ মতো কোনও উপায় আমি জানি না তবে অবশ্যই একটি সহজ এবং রক্ষণাবেক্ষণের উপায় রয়েছে।

সাধারণ সার্ভার সেটিংসকে একটি পৃথক ফাইল, যেমন "সার্ভারফু.কনফ" এ সরান এবং তারপরে includeএটি পৃথক server {}ব্লকগুলিতে যেমন:

server {
    listen 80;
    include serverFoo.conf;
}
server {
    listen 443 ssl;
    include serverFoo.conf;
}

2
+1 = আমার পক্ষে কাজ করে। (এটি অন্য পদ্ধতির সাথে কাজ করতে

এছাড়াও, লোড ব্যালেন্সার হিসাবে কাজ করে যদি অন্য উদাহরণ 'প্রক্সি_পাস' এর জন্য অ্যাকাউন্ট করে না।
মাইক পার্সেল

এই বিকল্পটি দুর্দান্ত যদি আপনার server_nameপ্রতিটি বন্দরগুলির জন্য আলাদা হয়
iDev247

5
এসএসএল ব্যবহার করবেন না, listen 443 ssl;এখন থেকে ব্যবহার করুন ।
বিপদ 89

এটিই একমাত্র সমাধান বলে মনে হচ্ছে যা সাম্প্রতিক এনজিএনএক্স 1.10.1 এর সাথে কাজ করছে। কোনও কারণে দুটি listenলাইন সঠিকভাবে ব্যাখ্যা করা যায় না, তবে server{}এটিকে আলাদা করে ফিক্সে নিয়ে যায়।
আর্তুর বোদেরা

9

ইতিমধ্যে সহায়ক উত্তরের উপর সম্প্রসারণ করা, এখানে আরও একটি সম্পূর্ণ উদাহরণ:

server {

    # Listen on port 80 and 443
    # on both IPv4 and IPv6
    listen 80;
    listen [::]:80 ipv6only=on;
    listen 443 ssl;
    listen [::]:443 ipv6only=on ssl;

    # Set website folder
    root /path/to/your/website;

    # Enable SSL
    ssl_certificate your-cert.pem;
    ssl_certificate_key your-cert.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;
}

2
আমি জানি এটি একটি পুরানো উত্তর, তবে এটি সম্পূর্ণ সম্পূর্ণ হিসাবে আমি অন্যদের জন্য এটি চিহ্নিত করতে চেয়েছিলাম যারা এটি ব্যবহার করতে পারে যে আপনার SSL দুর্বলতার পক্ষে এসএসএলভি 3 প্রোটোকলটি অক্ষম করা উচিত: অক্ষম এসএল 3.com পরিবর্তে ব্যবহার করুন: এসএসএল_প্রোটোকল টিএলএসভি 1 টিএলএসভি 1 .1 টিএলএসভি 1.2;
ব্যবহারকারী 147787

4

কেবল ইগর / জৌদারের পোস্টে যুক্ত করতে, আপনি যদি একটি নির্দিষ্ট আইপি শুনছেন তবে আপনি ব্যবহার করতে পারেন:

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.