【问题标题】:How to run python bottle on port 80?如何在端口 80 上运行 python 瓶?
【发布时间】:2013-09-13 22:25:53
【问题描述】:

当尝试在端口 80 上运行 python 瓶时,我得到以下信息:

socket.error: [Errno 10013] An attempt was made to access a socket in a way forb
idden by its access permissions

我的目标是在端口 80 上运行 Web 服务器,这样 url 就会很好而且整洁,无需指定端口 例如:

http://localhost/doSomething  

而不是

http://localhost:8080/doSomething

有什么想法吗?

谢谢

【问题讨论】:

    标签: python http webserver bottle


    【解决方案1】:

    正如错误所说。您需要有权限才能在 80 端口上运行某些东西,普通用户无法执行此操作。您可以以 root 身份(或者可能是 www-data)执行 bottle webapp,只要端口空闲就可以了。

    但考虑到安全性(和稳定性),您应该考虑不同的部署方式,例如 nginx 和 gunicorn。

    【讨论】:

      【解决方案2】:
      • 检查系统的防火墙设置。

      • 使用以下命令检查其他应用程序是否已使用端口 80:

        • 在 unix 上:netstat -an | grep :80
        • 在 Windows 上:netstat -an | findstr :80

      根据Windows Sockets Error Codes

      WSAEACCES 10013

      权限被拒绝。

      试图以一种被其禁止的方式访问套接字 访问权限。一个例子是使用广播地址发送到 没有使用 setsockopt(SO_BROADCAST) 设置广播权限。 WSAEACCES 错误的另一个可能原因是当绑定 调用函数(在带有 SP4 的 Windows NT 4.0 和更高版本上),另一个 应用程序、服务或内核模式驱动程序绑定到同一个 具有独占访问权限的地址。这种独占访问是一项新功能 Windows NT 4.0 SP4 及更高版本,并通过使用 SO_EXCLUSIVEADDRUSE 选项。

      【讨论】:

      • 如果端口已被使用,如果我没有佩戴,系统会显示“端口已打开”
      • @FoxMaSk,我添加了来自 MSDN 的文本。
      • 我通过搜索这个错误发现的,通常链接到 windows os
      【解决方案3】:

      有时不需要安装 nginx,带有 gunicorn 的 python 是主管的可行替代方案,但您需要制作很多技巧来工作

      我假设你知道安装主管,然后再安装要求

      pip3 install virtualenv
      mkdir /home/user/.envpython
      virtualenv /home/user/.envpython/bin/activate
      source /home/user/.envpython/bin/activate
      cd /home/user/python-path/
      pip3 install -r requirements
      

      创建一个这样的主管文件

      nano /etc/supervisord.d/python-file.conf
      

      并用这个例子编辑,编辑你需要的程序,记住python3在其他端口运行> 1024

      ;example with path python supervisor in background
      [program:python]
      environment=HOME="/home/user",USER="user"
      user=user
      directory = /home/user/python-path
      command = python3 /home/user/python-path/main.py
      
      priority = 900
      autostart = true
      autorestart = true
      stopsignal = TERM
      
      ;redirect_stderr = true
      stdout_logfile = /home/user/.main-python-stdout.log
      stderr_logfile = /home/user/.main-python-stderr.log
      
      ;example with path python gunicorn supervisor and port 80
      [program:gunicorn]
      ;environment=HOME="/home/user",USER="user"
      ;user=user
      directory = /home/user/python-path
      command = bash /home/user/.scripts/supervisor-initiate.sh
      
      priority = 900
      autostart = true
      autorestart = true
      stopsignal = TERM
      
      ;redirect_stderr = true
      stdout_logfile = /home/user/.main-python-stdout.log
      stderr_logfile = /home/user/.main-python-stderr.log
      

      并创建文件

      nano /home/user/.scripts/supervisor-initiate.sh
      

      内容如下

      source /home/user/.envpython/bin/activate
      cd /home/user/python-path
      gunicorn -w 1 -t 120 -b 0.0.0.0:80 main:app
      

      我假设您在 python 中的文件称为 main 并且您使用名为“app”的烧瓶或 django 启动应用程序

      只重启supervisord进程

      systemctl restart supervisord
      

      并且您在端口 80 中有带有 gunicorn 的应用程序,我发帖是因为我找到了这个解决方案很长时间

      等待对任何人都有效

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 2012-08-22
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 2015-06-18
        • 2015-09-28
        相关资源
        最近更新 更多