nginx HTTPS HTTP හා සමාන වින්‍යාසයකින් සේවය කරයි


206

Nginx server {}කුට්ටි දෙකක් හරහා වින්‍යාස කිරීමේ නියමයන් බෙදා ගැනීමට ක්‍රමයක් තිබේද? මගේ වෙබ් අඩවියේ HTTPS සහ HTTP අන්තර්ගතයන් එකම වින්‍යාසය සමඟ සේවය කර ඇති බැවින්, නීති අනුපිටපත් කිරීමෙන් වැළකී සිටීමට මම කැමතියි.

දැනට, එය මේ වගේ ය:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

මට පහත පරිදි යමක් කළ හැකිද:

server {
  listen 80, 443;
  ...

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

Answers:


278

ඔබට මෙය එක් සේවාදායක කොටසකට ඒකාබද්ධ කළ හැකිය:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

නිල කෙසේද


7
80 වන වරාය හරහා පටවා ඇත්නම් එස්එස්එල් නියමයන් නොසලකා හැරීමට තරම් එන්ජින්එක්ස් බුද්ධිමත් යැයි මට නොතේරුණි. නියමයි!
ceejayoz

74
nginx යනු සියලු ආකාරයේ වින් ය.
ජවුඩර් හෝ

6
ඔබට එක් සේවාදායකයක අඩවි කිහිපයක් තිබේ නම්, "පෙරනිමිය" අනිවාර්ය නොවන බව සඳහන් කිරීම වටී
luchaninov

4
එය ඉතා අලංකාරයි ...
ඇලික්ස් ඇක්සෙල්

3
මෙහි වැඩ නොකරයි ... "සරල HTTP ඉල්ලීම HTTPS වරායට යවන ලදි"
gcstr

90

පිළිගත් පිළිතුර පැහැදිලි කිරීම සඳහා, ඔබ මඟ හැරිය යුතුය

SSL on;

0.8.21 න් පසු ඔබට nginx අනුවාදය සඳහා පහත සඳහන් දෑ අවශ්‍ය වේ

listen 443 ssl;

යොමුව:

Nginx Docs - තනි HTTP / HTTPS සේවාදායකයක් වින්‍යාස කිරීම


2
ඔබට ස්තුතියි! Http හි කිසිවක් ක්‍රියා නොකරන්නේ මන්දැයි මට සිතා ගැනීමට නොහැකි විය. SSL ඉවත් කිරීම; වැඩ කළා.
ක්‍රිස් කමිංස්

30

ඔබ යෝජනා කරන ක්‍රමයක් ගැන මම නොදනිමි, නමුත් නිසැකවම පහසු සහ නඩත්තු කළ හැකි ක්‍රමයක් තිබේ.

පොදු සේවාදායක සැකසුම් වෙනම ගොනුවකට ගෙන යන්න, එනම් "serverFoo.conf" ඉන්පසු includeඑය වෙනම server {}කොටස් වලට ගෙන යන්න:

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

2
+1 = මා වෙනුවෙන් වැඩ කරයි. (එය වෙනත් ක්‍රමයක් සමඟ වැඩ කිරීමට නොහැකි විය.)

තවද, අනෙක් උදාහරණය බර බැලන්සර් ලෙස ක්‍රියා කරන්නේ නම් 'ප්‍රොක්සි_පාස්' සඳහා හේතු නොවේ.
මයික් පර්සෙල්

server_nameඑක් එක් වරාය සඳහා ඔබේ වෙනස් නම් මෙම විකල්පය විශිෂ්ටයි
iDev247

5
Ssl on භාවිතා නොකරන්න, listen 443 ssl;දැන් සිට එකක් භාවිතා කරන්න .
අනතුර 89

මෑත කාලීන nginx 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
: මම ඉතා සම්පූර්ණ මම ඔබ POODLE අවදානම එහි ගොදුරු ලෙස SSLv3 ප්රොටෝකෝලය අක්රීය කළ යුතු බව එය භාවිතා කළ හැක අය සඳහා පෙන්වා කිරීමට අවශ්ය මෙම ලස්සන පැරණි පිළිතුර දන්නවා, නමුත් එය තියෙන්නේ ලෙස disablessl3.com ඒ වෙනුවට භාවිතා කරන්න: ssl_protocols TLSv1 TLSv1 .1 TLSv1.2;
user147787

4

ඊගෝර් / ජවුඩර්ගේ පෝස්ටයට එක් කිරීම සඳහා, ඔබ විශේෂිත IP එකකට සවන් දෙන්නේ නම් ඔබට භාවිතා කළ හැකිය:

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.