如何通过不同的端口(非80)启动nginx

164

您好,我是nginx的新手,尝试在已经安装了apache的运行Ubuntu 4的服务器上设置它。

所以,在执行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;
     }
 }

基本上,除了添加了服务器部分,我没有做任何修改。


你有同样的信息吗?也许端口已经改变了吗?你尝试通过sudo运行Nginx了吗? - dmr
对于CentOS,这个链接可能会有所帮助:http://serverfault.com/questions/566317/nginx-no-permission-to-bind-port-8090-but-it-binds-to-80-and-8080 - vintuwei
您可以参考此在NGINX中使用80端口以外的端口 - Shomaail
您可以参考此在NGINX中使用80端口以外的端口 - Shomaail
6个回答

222
您需要前往/etc/nginx/sites-enabled/目录,如果这是默认配置,则应该有一个名为default的文件。编辑该文件并定义所需的端口。在下面的代码片段中,我们将Nginx实例服务于81端口。
server {
    listen 81;
}

要启动服务器,请运行下面的命令行;

sudo service nginx start

现在您可以通过端口81访问您的应用程序(对于本地主机,http://localhost:81)。


或者,如果您没有安装服务(通常是OS X),您可以运行:`sudo nginx -s reload` - John Paul Barbagallo
如果nginx已经在运行,您可能需要重新启动 sudo service nginx restart - depicus
4
在使用81端口时,我在Chrome中遇到了错误:“此网页不可用ERR_CONNECTION_TIMED_OUT”,但使用80端口则正常运行。 - Dariux
我已经这样做了,但是当我运行 netstat 命令时,仍然有一些东西在监听端口80。你有任何想法吗? - Mustafa Chelik
1
还要检查/etc/nginx/sites-available目录中的默认设置。 - Amit Teli
你怎么编辑这个文件?我无法修改它,因为它一直显示我没有权限,尽管我已经执行了chown命令。 - jay

28

按照以下步骤进行: 打开您的配置文件

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

在81端口访问您的nginx服务器文件


1
我的问题通过这种方法得到了解决,这个方法与你的方法几乎相似。 - sinshiva
FYI:在Windows下,Nginx的正确文件名应为conf\nginx.conf。 - Johnny Bigoode
1
无论配置文件的名称是什么,因为整个配置目录都被引用,所以这并不重要。 - sinshiva

23
您需要更改Apache或Nginx的配置端口。此操作完成后,您需要使用之前所使用的“服务”命令来重新启动已重新配置的服务器。

Apache

编辑

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

4
如果您在使用Docker时遇到此问题,请确保映射正确的端口号。如果在运行Docker时(或通过docker-compose.yml)映射端口81:80,则您的nginx必须监听端口80而不是81,因为Docker已经做了映射。我自己也花了相当多的时间解决这个问题,希望它对未来的谷歌搜索者有所帮助。

4

如果您使用的是Windows操作系统,则以下端口相关的服务器设置在<nginx安装路径>/conf文件夹中的nginx.conf文件中。

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

更改端口号并重新启动实例。


0

semanage port -a -t PORT_TYPE -p tcp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接