如何在端口80上运行python瓶?

时间:2013-09-10 09:19:25

标签: python http webserver bottle

当尝试在端口80上运行python bottle时,我得到以下内容:

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

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

http://localhost/doSomething  

而不是

http://localhost:8080/doSomething

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:2)

正如错误所说的那样。您需要具有在第80个端口上运行某些内容的权限,普通用户无法执行此操作。您可以以root用户身份执行瓶子webapp(或者可能是www-data),只要端口空闲,它就应该没问题。

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

答案 1 :(得分:1)

  • 检查系统的防火墙设置。

  • 使用以下命令检查另一个应用程序是否已使用端口80:

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

根据Windows Sockets Error Codes

  

WSAEACCES 10013

     

许可被拒绝。

     

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

答案 2 :(得分:0)

有时不需要安装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,并使用flask或django初始化了名为“ app”的应用程序

仅重新启动受监管进程

systemctl restart supervisord

您在80端口上安装了带有gunicorn的应用程序,因为我在很长一段时间内都找到了这种解决方案,所以我发了帖子

等待任何人都可以使用