首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >google云平台:无法启动java https服务器

问google云平台:无法启动java https服务器
EN

Stack Overflow用户
提问于 2017-09-22 02:59:28
回答 1查看 444关注 0票数 0

以下是简单的程序:

代码语言:javascript
复制
import com.sun.net.httpserver.HttpsServer;
import java.net.InetSocketAddress;

class SimpleServer {
  public static void main(String[] pArgs) {
    try {
      HttpsServer s = HttpsServer.create(new InetSocketAddress(443), 0);
      System.out.println(" " + s);
    } catch (Exception pE) {
      throw new RuntimeException("Could not create HTTPS server", pE);  
    }
  }
}

将无法在由谷歌云平台(IaaS)托管的Debian中工作:

代码语言:javascript
复制
Exception in thread "main" java.lang.RuntimeException: Could not create HTTPS server
    at SimpleServer.main(SimpleServer.java:10)
Caused by: java.net.SocketException: Permission denied
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at sun.net.httpserver.ServerImpl.<init>(ServerImpl.java:100)
    at sun.net.httpserver.HttpsServerImpl.<init>(HttpsServerImpl.java:50)
    at sun.net.httpserver.DefaultHttpServerProvider.createHttpsServer(DefaultHttpServerProvider.java:39)
    at com.sun.net.httpserver.HttpsServer.create(HttpsServer.java:90)
    at SimpleServer.main(SimpleServer.java:7)

此示例在Windows桌面上运行时可以工作,如果我们将端口从443更改为其他端口,则也是如此。那么,我们如何迫使google云允许服务器在443上运行呢?我尝试过打开防火墙,但这不起作用(并不是它真的应该打开) :-(因为这是一个单独的问题)。

java版本(尽管我怀疑这很重要)是:

代码语言:javascript
复制
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-8u141-b15-1~deb9u1-b15)
OpenJDK 64-Bit Server VM (build 25.141-b15, mixed mode)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 05:25:14

这不是GCP问题,而是linux/Unix安全特性。

linux/Unix上低于1024的端口是“特权端口”,需要提升特权才能创建。

在GCP中,您有几种选择。

使用高于1024的高端口作为非私有用户,并:

  • 连接到url https://foo:8443中的高端口。
  • 使用GCP网络或HTTP/HTTPS负载均衡器将端口443转发到高端口
  • 利用IP表将数据包从443转发到VM实例中的高端口。
  • 使用suid、sudo或其他方法运行服务
  • 将_CAP_NET_BIND_SERVICE_功能(7)授予流程。

后两种选择具有复杂的安全影响,应尽可能避免。

下面的链接将涵盖上述一些选项,但第一个选项将是最简单的,而且比前两个选项安全得多。

user。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46356163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档