שאלה nginx HTTPS שמגישים עם אותה תצורה כמו HTTP


האם יש דרך לשתף הנחיות תצורה בשני nginx server {} בלוקים? ברצוני להימנע משכפול הכללים, שכן תוכן HTTPS ו- HTTP של האתר שלי מוגש עם אותה התצורה.

נכון לעכשיו, זה ככה:

server {
  listen 80;
  ...
}

server {
  listen 443;

  ssl on; # etc.
  ...
}

האם אני יכול לעשות משהו כמו:

server {
  listen 80, 443;
  ...

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

174
2018-05-21 16:18






תשובות:


ניתן לשלב את זה בבלוק שרת אחד כך:

server {
    listen 80;
    listen 443 default_server ssl;

    # other directives
}

הרשמי How-To


238
2018-05-21 18:54



אה, לא היה לי מושג nginx היה אינטליגנטי מספיק כדי להתעלם הנחיות SSL אם טעון מעל יציאה 80. Awesome! - ceejayoz
nginx הוא כל מיני WIN. - Jauder Ho
ואם יש לך כמה אתרים בשרת אחד, כדאי להזכיר כי "ברירת המחדל" אינה חובה - luchaninov
כל כך אלגנטי זה כואב ... - Alix Axel
לא עובד כאן ... "הבקשה HTTP רגיל נשלח ליציאת HTTPS" - gcstr


כדי להבהיר את התשובה המקובלת, אתה צריך להשמיט

SSL on;

ואתה רק צריך את הגירסה הבאה nginx אחרי 0.8.21

listen 443 ssl;

התייחסות:

Nginx Docs - הגדרת שרת HTTP / HTTPS יחיד


81
2018-06-13 06:19



תודה! לא הצלחתי להבין מדוע שום דבר ב- http לא עובד. הסרת SSL ב; עבד. - Chris Cummings


אני לא יודע על דרך כמו שאתה מציע, אבל בהחלט יש דרך קלה לתחזוקה.

העבר הגדרות שרת נפוצות לקובץ נפרד, כלומר "serverFoo.conf" ולאחר מכן include זה נפרד server {} בלוקים כמו:

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

26
2018-05-21 18:38



+1 = עובד בשבילי. (לא הצלחתי לגרום לזה לעבוד עם השיטה השנייה). - lackey
כמו כן, הדוגמה השנייה אינה אחראית ל 'proxy_pass' אם מתנהגת כמאזנת עומס. - Mike Purcell
אפשרות זו מצוינת אם server_name הוא שונה עבור כל יציאה - iDev247
אל תשתמש ב- SSL, השתמש listen 443 ssl; מעכשיו והלאה. - danger89
זה נראה הפתרון היחיד שעובד עם nginx האחרונות 1.10.1. משום מה listen הקווים אינם מתפרשים כראוי, אלא מעבירים אותם בנפרד server{} מתקן את זה. - Artur Bodera


בהרחבה על התשובות מועיל כבר, הנה דוגמה מלאה יותר:

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;
}

7
2018-05-10 17:48



אני יודע שזו תשובה ישנה למדי, אבל כמו שזה שלם מאוד אני רק רוצה להצביע על אחרים שעשויים להשתמש בו כי אתה צריך להשבית את פרוטוקול SSLv3 כפי פגיע שלה פגיעות פודל: disablessl3.com  במקום להשתמש: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - user147787


רק כדי להוסיף להודעה של איגור / ג'אודר, אם אתה מקשיב ל- IP מסוים אתה יכול להשתמש:

listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;

4
2018-02-25 13:11