วิธีการเรียกใช้ nginx SSL บนพอร์ตที่ไม่ได้มาตรฐาน


16

ฉันรู้ว่านี่เป็นคำถามที่ซ้ำกันอย่างน้อยสองสามข้อ แต่ฉันได้อ่านมาแล้วหลายครั้งและฉันก็ยังทำอะไรผิดไป

ต่อไปนี้เป็นเนื้อหาของแฟ้ม myexample.com Nginx /etc/nginx/sites-availableการตั้งค่าของฉันอยู่ใน

server {

  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
      index index.html index.htm;

}

ใช้งานได้เมื่อฉันไปที่https://myexample.comเนื้อหาจะแสดงและการเชื่อมต่อนั้นปลอดภัย ดังนั้นการกำหนดค่านี้ดูเหมือนจะดี

ตอนนี้ถ้าฉันเปลี่ยนพอร์ต ssl เป็น 9443 และโหลดการกำหนดค่า nginx ใหม่การกำหนดค่าโหลดใหม่โดยไม่มีข้อผิดพลาด แต่การเข้าชมhttps://myexample.comแสดงข้อผิดพลาดในเบราว์เซอร์ (ไซต์นี้ไม่สามารถเข้าถึง / myexample.com ปฏิเสธที่จะ เชื่อมต่อ. ERR_CONNECTION_REFUSED)

ฉันได้พยายามเสนอแนะและเอกสารที่นี่ , ที่นี่และที่นี่ (อื่น) แต่ผมเคยได้รับข้อผิดพลาด ERR_CONNECTION_REFUSED

ฉันควรทราบว่าฉันสามารถใช้พอร์ตที่ไม่ได้มาตรฐานแล้วอย่างชัดเจนพิมพ์พอร์ตนั้นใน URL เช่นhttps://myexample.com:9443 แต่ฉันไม่ต้องการทำเช่นนั้น สิ่งที่ฉันต้องการคือให้ผู้ใช้พิมพ์ myexample.com ลงในเบราว์เซอร์ใดก็ได้และให้ nginx เปลี่ยนเส้นทางไปที่การเชื่อมต่อที่ปลอดภัยโดยอัตโนมัติ

อีกครั้งฉันไม่มีปัญหาใด ๆ เมื่อฉันใช้พอร์ต SSL มาตรฐาน 443

แก้ไข:ฉันใช้ nginx / 1.6.2 กับ debian / jessie


1
คุณพูดถึงว่า "ฉันควรทราบว่าฉันสามารถใช้พอร์ตที่ไม่ได้มาตรฐานจากนั้นพิมพ์พอร์ตนั้นลงใน URL อย่างชัดเจนเช่นmyexample.com:9443 " คุณช่วยอธิบายได้ไหมว่าคุณสามารถทำสิ่งนี้ได้อย่างไรเพราะฉันต้องการเข้าถึงเว็บไซต์ของฉันโดยใช้smthเช่น " myexample.com:9443 " โดยมี SSL รวมอยู่ด้วย
Ghassan Zein

คำตอบ:


23

เพื่อรองรับการพิมพ์ " https://myexample.com " ในเบราว์เซอร์ของคุณและการจัดการnginxconfig ฟังบนพอร์ต 9443 คุณจะต้องมีการกำหนดค่าเพิ่มเติมnginxที่ยังคงฟังบนพอร์ต 443 เนื่องจากเป็นพอร์ต IP ซึ่งเชื่อมต่อเบราว์เซอร์

ดังนั้น:

server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  # Redirect the browser to our port 9443 config
  return 301 $scheme://myexample.com:9443$request_uri;
}

server {
  listen 9443 ssl;
  listen [::]:9443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
  index index.html index.htm;
}

ขอให้สังเกตว่าจำเป็นต้องใช้ใบรับรอง / คีย์เดียวกันสำหรับทั้งสองส่วนเนื่องจากใบรับรองมักจะเชื่อมโยงกับชื่อโฮสต์ DNS แต่ไม่จำเป็นต้องใช้พอร์ต

หวังว่านี่จะช่วยได้!


นี่คือคำตอบที่สมบูรณ์ที่สุด แต่สิ่งที่ฉันคิดว่าคุณกำลังบอกฉันคือเพื่อเปลี่ยนเส้นทางไปยังการเชื่อมต่อที่ปลอดภัยโดยอัตโนมัติ nginx ยังคงต้องเชื่อมต่อกับพอร์ต 443 นี่เป็นกรณีนี้หรือไม่ นั่นเป็นปัญหา :-( ฉันมีกระบวนการอื่นที่ผูกไว้กับพอร์ตนั้น
GojiraDeMonstah

Nginx เป็น reverse proxy คุณสามารถฟัง 443 และส่งคำขอไปยังแอปพลิเคชันที่เหมาะสม
ทิม

ทิม - คุณถูกต้อง ฉันอาจจะถามคำถามโง่ ๆ จริง ๆ แต่ฉันหวังว่าจะมีวิธีการเพียงแค่เปลี่ยน "พอร์ต" SSL อย่างน่าอัศจรรย์
GojiraDeMonstah

@GojiraDeMonstah หากคุณไม่ต้องการใช้พอร์ต 443 คุณใส่หมายเลขพอร์ตที่คุณเลือกใน URL นั้นคือทั้งหมด.
Michael Hampton

"ssl" นั้นสำคัญมาก ฉันมี default_server มาก่อนและพยายามอย่างหนักเป็นบางครั้ง
swateek

0

เมื่อคุณพิมพ์https://example.comมาตรฐานสำหรับ https: // scheme คือการเชื่อมต่อกับพอร์ต 443 ในกรณีของคุณคุณย้ายเซิร์ฟเวอร์ของคุณเพื่อให้ตอนนี้ฟังพอร์ต 9443 คุณได้รับการเชื่อมต่อที่ถูกปฏิเสธข้อความเนื่องจากเหตุนี้ - ไม่มีสิ่งใดรับฟังบนพอร์ต 443

คุณจะต้องจัดให้มีสิ่งที่ฟังบนพอร์ต 443 ที่เปลี่ยนเส้นทางการเชื่อมต่อไปยังพอร์ต 9443 หรือใช้พอร์ตเป็นส่วนหนึ่งของ URL


-1

หากคุณเปลี่ยนพอร์ตเป็นพอร์ตที่ไม่ได้มาตรฐานเช่น 9443 คุณจะต้องเพิ่มการเปลี่ยนเส้นทางจาก 443 เป็น 9443 ตั้งค่า nginx เพื่อย้อนกลับพร็อกซีไปยังพอร์ตนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.