Cara menjalankan nginx SSL pada port non-standar

15

Saya menyadari ini terlihat seperti duplikat dari setidaknya beberapa pertanyaan lain, tetapi saya telah membacanya beberapa kali dan masih melakukan kesalahan.

Berikut ini adalah isi dari file konfigurasi nginx myexample.com saya yang terletak di /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;

}

Ini berfungsi, ketika saya membuka https://myexample.com kontennya disajikan dan koneksi aman. Jadi konfigurasi ini sepertinya bagus.

Sekarang jika saya mengubah port ssl ke 9443 dan memuat ulang konfigurasi nginx, konfigurasi tersebut memuat ulang tanpa kesalahan, tetapi mengunjungi https://myexample.com menunjukkan kesalahan pada browser (Situs ini tidak dapat dijangkau / myexample.com menolak untuk terhubung. ERR_CONNECTION_REFUSED)

Saya telah mencoba saran dan dokumentasi di sini , di sini , dan di sini (di antara yang lain) tetapi saya selalu mendapatkan kesalahan ERR_CONNECTION_REFUSED.

Saya harus mencatat bahwa saya dapat menggunakan port non-standar dan kemudian secara eksplisit mengetik port itu ke dalam URL, misalnya, https://myexample.com:9443 . Tetapi saya tidak ingin melakukan itu. Yang saya inginkan adalah agar pengguna dapat mengetikkan myexample.com ke dalam browser apa pun dan meminta nginx mengalihkan ke koneksi aman secara otomatis.

Sekali lagi, saya tidak punya masalah apa pun ketika saya menggunakan port standar 443 SSL.

Sunting: Saya menggunakan nginx / 1.6.2 di debian / jessie

GojiraDeMonstah
sumber
1
Anda menyebutkan bahwa "Saya harus mencatat bahwa saya dapat menggunakan port non-standar dan kemudian secara eksplisit mengetik port itu ke dalam URL, misalnya, myexample.com:9443 ." Bisakah Anda jelaskan bagaimana Anda bisa melakukan ini karena saya ingin mengakses situs web saya menggunakan sesuatu seperti " myexample.com:9443 " dengan menyertakan SSL
Ghassan Zein

Jawaban:

22

Untuk mendukung pengetikan " https://myexample.com " di peramban Anda, dan setelah itu ditangani oleh nginxkonfigurasi mendengarkan di port 9443, Anda akan memerlukan nginxkonfigurasi tambahan yang masih mendengarkan pada port 443, karena itu adalah port IP untuk yang disambungkan oleh browser .

Jadi:

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

Perhatikan bahwa sertifikat / kunci yang sama diperlukan untuk kedua bagian, karena sertifikat biasanya dikaitkan dengan nama host DNS, tetapi tidak harus port.

Semoga ini membantu!

Castaglia
sumber
Ini adalah jawaban yang paling lengkap, tetapi apa yang saya pikir Anda katakan kepada saya adalah bahwa untuk mengarahkan ulang ke koneksi yang aman secara otomatis, nginx masih harus terikat ke port 443. Apakah ini masalahnya? Itulah masalahnya :-( Saya memiliki proses lain yang terikat pada port itu.
GojiraDeMonstah
Nginx adalah proxy terbalik. Anda dapat mendengarkannya di 443 dan mengirimkan permintaan ke aplikasi yang sesuai.
Tim
Tim - Anda benar. Saya mungkin mengajukan pertanyaan bodoh, tetapi saya berharap ada cara untuk "secara ajaib" mengubah port SSL.
GojiraDeMonstah
@GojiraDeMonstah Jika Anda tidak ingin menggunakan port 443, Anda memasukkan nomor port yang Anda pilih di URL. Itu semuanya.
Michael Hampton
"Ssl" itu cukup penting. Saya memiliki default_server sebelumnya dan berjuang untuk itu cukup lama.
swateek
0

Saat Anda mengetik https://example.com , standar untuk skema https: // adalah menyambung ke port 443. Dalam kasus Anda, Anda telah memindahkan server Anda sehingga sekarang mendengarkan pada port 9443. Sambungan Anda ditolak pesan karena ini - tidak ada yang mendengarkan pada port 443.

Anda perlu mengatur agar sesuatu mendengarkan pada port 443 yang mengalihkan koneksi ke port 9443 atau menggunakan port sebagai bagian dari URL.

user9517
sumber
-1

jika Anda mengubah port ke port non standar seperti 9443 Anda harus menambahkan redirection dari 443 ke 9443. Set nginx untuk membalikkan proxy ke port itu.

Kitsufan
sumber