วิธีเริ่ม nginx ผ่านพอร์ตอื่น (นอกเหนือจาก 80)


128

สวัสดีฉันเป็นมือใหม่ใน nginx ฉันพยายามตั้งค่าบนเซิร์ฟเวอร์ของฉัน (ใช้ Ubuntu 4) ซึ่งมี apache ทำงานอยู่แล้ว

หลังจากapt-get installนั้นฉันพยายามเริ่ม nginx จากนั้นฉันจะได้รับข้อความดังนี้:

Starting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)

นั่นเป็นเหตุผลที่ Apache ใช้พอร์ต 80

จากนั้นฉันพยายามแก้ไขnginx.confฉันอ้างอิงบางบทความดังนั้นฉันจึงเปลี่ยนเป็นดังนี้:

   server {

        listen       8080;

        location / {
         proxy_pass  http://xx.xx.xx.xx:9500;
         proxy_set_header   Host             $host:8080;
         proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
         proxy_set_header Via    "nginx";
        }

หลังจากบันทึกสิ่งนี้แล้วลองเริ่ม nginx อีกครั้งฉันยังคงได้รับข้อผิดพลาดเหมือนเดิม ฉันไม่สามารถหาโพสต์ที่เกี่ยวข้องเกี่ยวกับเรื่องนี้ได้คนดีๆสามารถทำลายความสว่างได้หรือไม่?

ขอบคุณล่วงหน้า :)

================================================== =======================

ฉันควรโพสต์เนื้อหาทั้งหมดใน conf ที่นี่:

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;

    access_log  /var/log/nginx/access.log;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

   server {

        listen       81;

        location / {
         proxy_pass  http://94.143.9.34:9500;
         proxy_set_header   Host             $host:81;
         proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
         proxy_set_header Via    "nginx";
        }


    }
}

 mail {
      See sample authentication script at:
      http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript

      auth_http localhost/auth.php;
      pop3_capabilities "TOP" "USER";
      imap_capabilities "IMAP4rev1" "UIDPLUS";

     server {
         listen     localhost:110;
         protocol   pop3;
         proxy      on;
     }

     server {
         listen     localhost:143;
         protocol   imap;
         proxy      on;
     }
 }

โดยทั่วไปฉันไม่ได้เปลี่ยนแปลงอะไรเลยนอกจากการเพิ่มส่วนเซิร์ฟเวอร์


คุณมีข้อความเดียวกัน อาจจะมีการเปลี่ยนพอร์ตเป็นพอร์ตอื่น? คุณพยายามรัน nginx ผ่าน sudo หรือไม่?
dmr

สำหรับ centos ลิงค์นี้อาจช่วยได้serverfault.com/questions/566317/…
vintuwei

คุณสามารถอ้างถึงสิ่งนี้โดยใช้พอร์ตอื่นที่ไม่ใช่ 80 ใน
NGINX

คุณสามารถอ้างถึงสิ่งนี้โดยใช้พอร์ตอื่นที่ไม่ใช่ 80 ใน
NGINX

คำตอบ:


182

คุณต้องไปที่/etc/nginx/sites-enabled/และถ้านี่คือการกำหนดค่าเริ่มต้นควรมีไฟล์ตามชื่อ: default.

แก้ไขไฟล์นั้นโดยกำหนดพอร์ตที่คุณต้องการ ในตัวอย่างด้านล่างเรากำลังให้บริการอินสแตนซ์ Nginx บนพอร์ต 81

server {
    listen 81;
}

ในการเริ่มต้นเซิร์ฟเวอร์ให้เรียกใช้บรรทัดคำสั่งด้านล่าง

sudo service nginx start

ตอนนี้คุณสามารถเข้าถึงแอปพลิเคชันของคุณบนพอร์ต 81 (สำหรับ localhost, http: // localhost: 81 )


หรือหากคุณไม่ได้ติดตั้งบริการ (OS X โดยปกติ) คุณสามารถเรียกใช้: sudo nginx -s reload
John Paul Barbagallo

คุณอาจต้องรีสตาร์ทหาก nginx ทำงานอยู่แล้วsudo service nginx restart
depicus

3
ฉันได้รับข้อผิดพลาดใน chrome เมื่อลองกับพอร์ต 81: "หน้าเว็บนี้ไม่พร้อมใช้งาน ERR_CONNECTION_TIMED_OUT" แต่ 80 ทำงานได้ดี
Darius.V

ฉันทำสิ่งนี้แล้ว แต่เมื่อฉันเรียกใช้netstatยังมีบางอย่างฟังอยู่ที่พอร์ต 80 คุณมีความคิดหรือไม่?
Mustafa Chelik

ตรวจสอบค่าเริ่มต้นด้วย/etc/nginx/sites-available directory
Amit Teli

22

คุณจะต้องเปลี่ยนพอร์ตกำหนดค่าของ Apache หรือ Nginx หลังจากคุณทำสิ่งนี้คุณจะต้องรีสตาร์ทเซิร์ฟเวอร์ที่กำหนดค่าใหม่โดยใช้คำสั่ง 'service' ที่คุณใช้


อาปาเช่

แก้ไข

sudo subl /etc/apache2/ports.conf 

และเปลี่ยน 80 ในบรรทัดต่อไปนี้เป็นค่าอื่น:

Listen 80

หากคุณเพิ่งเปลี่ยนพอร์ตหรือเพิ่มพอร์ตเพิ่มเติมที่นี่คุณอาจต้องเปลี่ยนคำสั่ง VirtualHost ใน

sudo subl /etc/apache2/sites-enabled/000-default.conf

และเปลี่ยน 80 ในบรรทัดต่อไปนี้เป็นค่าอื่น:

<VirtualHost *:80>

จากนั้นรีสตาร์ทโดย:

sudo service apache2 restart

Nginx

แก้ไข

/etc/nginx/sites-enabled/default

และเปลี่ยน 80 ในบรรทัดต่อไปนี้:

listen 80;

จากนั้นรีสตาร์ทโดย:

sudo service nginx restart

20

ตามนี้: เปิดไฟล์กำหนดค่าของคุณ

vi /etc/nginx/conf.d/default.conf

เปลี่ยนหมายเลขพอร์ตที่คุณกำลังฟัง

listen       81;
server_name  localhost;

เพิ่มกฎให้กับ iptables

 vi /etc/sysconfig/iptables 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT

รีสตาร์ท IPtables

 service iptables restart;

รีสตาร์ทเซิร์ฟเวอร์ nginx

service nginx restart

เข้าถึงไฟล์เซิร์ฟเวอร์ yr nginx บนพอร์ต 81


1
ปัญหาของฉันได้รับการแก้ไขโดยใช้วิธีนี้ซึ่งเกือบจะคล้ายกับคุณ
sinshiva

FYI: ชื่อไฟล์ที่ถูกต้องสำหรับ nginx ภายใต้ windows จะเป็น conf \ nginx.conf
Johnny Bigoode

ไม่สำคัญว่าชื่อของไฟล์ conf คืออะไรเนื่องจาก conf dir ทั้งหมดมีที่มา
sinshiva

3

ถ้าคุณอยู่ในหน้าต่างแล้วด้านล่างที่เกี่ยวข้องกับพอร์ตการตั้งค่าเซิร์ฟเวอร์ที่มีอยู่ในไฟล์nginx.confที่<Nginx เส้นทางการติดตั้ง> / confโฟลเดอร์

server {
    listen       80;
    server_name  localhost;
....

เปลี่ยนหมายเลขพอร์ตและรีสตาร์ทอินสแตนซ์


1

หากคุณประสบปัญหานี้เมื่อใช้ Docker อย่าลืมแมปหมายเลขพอร์ตที่ถูกต้อง หากคุณแมปพอร์ต 81:80 เมื่อเรียกใช้นักเทียบท่า (หรือผ่าน docker-compose.yml) nginx ของคุณต้องฟังบนพอร์ต 80 ไม่ใช่ 81 เนื่องจากนักเทียบท่าทำการแมปไว้แล้ว

ฉันใช้เวลาพอสมควรกับปัญหานี้ด้วยตัวเองดังนั้นหวังว่าจะช่วยได้บ้างสำหรับ Googler ในอนาคต

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