- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 golang 中使用 gorilla/mux 包,但是有一些问题。首先是我没有权限在我的应用程序上使用端口 80,因为我无法从 sudo 运行应用程序,因为在使用 sudo 时未设置 $GOPATH
。
这是我从程序中得到的错误:
$ go run app.go
2014/06/28 00:34:12 Listening...
2014/06/28 00:34:12 ListenAndServe: listen tcp :80: bind: permission denied
exit status 1
我不确定当我解决 sudo 问题时它是否还能工作,因为 apache 已经在使用端口 80,我不确定我的应用程序和 apache 是否可以一起“玩得很好”。
任何关于如何解决这个问题的建议都很好。谢谢。
最佳答案
引用elithar的评论,
You have two options: either turn off Apache (because only one service can bind to a port), or (better!) use Apache's ProxyPass to proxy any incoming requests to a specific Hostname to your Go server running on port (e.g.) 8000. The second method is very popular, robust, and you can use Apache to handle request logging and SSL for you.
以这种方式在端口 80 上使用 Apache 称为反向代理。它接收端口 80(和/或 https 的端口 443)上的所有传入连接,并将它们传递给在您选择的任何端口上运行的 Go 程序,通常是未加密的,仅通过内部本地主机连接。经常使用 8000 和 8080。 Apache 和您的服务器之间的流量本身就是 HTTP 流量。
因为您的 Go 程序不以 root 身份运行,所以它无法更改服务器上的关键功能。因此,如果您的程序包含安全漏洞,它会提供额外的安全性,因为任何攻击者都只能获得有限的访问权限。
通过不使用 HTTP 从 Apache 到 Go 服务器的连接,您可以提高反向代理的整体性能。这是通过 FastCGI protocol 完成的,最初是为 shell、Perl 和 PHP 脚本开发的,但也适用于 Go。要使用它,您必须修改您的 Go 服务器以使用 fcgi 进行监听。应用程序接口(interface)。 Apache FastCGI也是必需的。从 Apache 到您的服务器的流量使用更紧凑的格式(不是 HTTP),这减少了每一端的负载。
套接字类型的选择也是开放的:可以使用Unix sockets代替通常的TCP套接字。 ,这进一步降低了处理负荷。我自己没有在 Go 中这样做,但 API 支持 the necessary bits (参见 related question)。
虽然上面所有描述的都是使用 Apache,但还有其他服务器产品也可以提供反向代理。最值得注意的是 Nginx ( Nginx reverse proxy example ),这将为您提供小而有用的性能和可扩展性优势。如果您的服务器上有此选项,那么值得学习和部署。
关于linux - Go、sudo 和 apache 端口 80,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462505/
sudo 命令 1、sudo 简介 sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户
我正在尝试更改 source.list。 主机有一个用户 deploy 和密码 deploy 我可以连接 ssh 并使用 sudo 对 source.list 进行任何操作。然而 ansible 似乎
我希望以我当前用户的权限运行 TOMCAT,而不是 root 的环境变量。 vagrant@dev:~/Workspace/eurekastreams$ echo $JAVA_OPTS -Xmx102
这个问题在这里已经有了答案: How to install python modules without root access? (9 个回答) 3年前关闭。 最终目标是在 redhat 机器上的
我一直在尝试允许 EC2 亚马逊服务器('ec2-user')的普通用户访问某个库。 我做了:“sudo chown -R ec2-user/usr”,我现在意识到这是一个致命的错误。它起作用了,但是
我正在尝试使用 cgi (python) 配置 apache2。为此,我必须更改某些文件夹和文件的权限,但每次尝试更改文件或文件夹的权限时,我都会收到 sudo fatal error 。 例如: 1
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我不想在 sudoers 文件中禁用 requiretty。请建议当我在 cron 作业中执行脚本时是否有其他方式启动终端 最佳答案 这可能是一个奇怪的解决方法,但您可以使用 -t 选项通过 cron
寻找将当前用户的别名传递给 sudo 的方法命令,我找到了以下 on ArchWiki : Passing aliases If you use a lot of aliases, you might
我已将 Royal TS 设置为在多台 Linux 计算机上使用我的用户名自动登录。我想让它在连接后自动运行 sudo su -,输入我的密码,这样只需双击连接即可获得 root 权限。 我已经通过创
我正在尝试使用涉及使用 sudo 的子进程。 它在终端中运行良好: sudo /home/pi/Desktop/fm_transmitter/bin/Release/fm_transmitter
我想通过 ssh 连接到远程服务器,更改用户然后执行脚本。我正在使用 subprocess 来执行此操作,但似乎 sudo -u userB -i 并未更改用户。 HOST = 'remote_ser
我正在尝试使用 Ansible 来配置一个 Vagrant 框和一个 EC2 服务器。使用 --connection=local 时,它在 Vagrant 框上工作正常,但似乎只是忽略了 sudo:
嗨,我为 Ansible 编写了一个剧本来安装一些应用程序。我遇到了麻烦,因为我必须以 root 身份运行所有东西,这不是一个好主意。 所以我创建了一个 sudo 用户并创建了一个用于身份验证的私钥。
我想通过 electron 写一个应用程序,但要求是更新需要 root 的文件允许。 通过 cli 很容易实现,就像 sudo vi xxx . 是否可以通过 electron 更新文件? ? 最佳答
我已经安装了以下 pkgs: ii tigervnc-common 1.10.1+dfsg-1 amd
我有一个经销商 Web 服务器,正在将其迁移到新计算机中。源服务器所有者提供了一个用户(我们称之为用户 A),该用户对其他用户具有 sudo 访问权限,但对 root 没有权限。我的用户没有对我需要提
use std::fs::OpenOptions; use std::io::Write; fn main() { let mut source_list = OpenOptions::new
我正在尝试使用命令 sudo jupyterhub 启动 JupyterHub。这会启动服务器,但用户无法登录。但是,当我使用 sudo -s 切换到 root 用户,然后输入 jupyterhub
我正在尝试安装 pip,但我在 StackOverflow 中陷入了相互冲突的答案中(请阅读末尾的评论以了解重复的问题)。 instructions说下载get-pip.py并使用 phyton 运行
我是一名优秀的程序员,十分优秀!