0

当尝试在端口 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

有任何想法吗?

谢谢

4

3 回答 3

2

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

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

于 2013-09-10T09:40:40.493 回答
1
  • 检查系统的防火墙设置。

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

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

根据Windows 套接字错误代码

WSAEACCES 10013

没有权限。

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

于 2013-09-10T09:34:56.093 回答
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 并且您使用名为“app”的烧瓶或 django 启动应用程序

只重启supervisord进程

systemctl restart supervisord

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

Waiting works for anyone

于 2020-04-24T02:41:40.830 回答