从Scala使用Unix域套接字的最佳方法是什么?
我找到了一个名为JUDS的Java库,但它似乎不允许我通过套接字发送文件描述符 - 这是我想首先使用Unix域套接字的原因.
JUDS自述文件是指一个名为J-BUDS的竞争库,但我无法在任何地方找到它.
我可以自己将这个功能添加到JUDS中,但是如果它已经在其他地方的jar文件中,我宁愿不重新发明轮子.
有没有办法让UNIX域套接字侦听器只接受来自某个用户的连接(chmod/ chown不适用于抽象套接字afaik),换句话说,获取传入连接的uid(在Linux上)?
在Linux上使用抽象unix套接字的Dbus有一个GetConnectionUnixUser由polkit用来确定调用者的函数.所以我想dbus-daemon必须有办法做到这一点.有谁知道它是如何工作的?
我希望我的MySQL服务器只使用unix socket,并忽略TCP网络,所以我将这一行添加到我的配置中/etc/my.cnf:
skip-networking
Run Code Online (Sandbox Code Playgroud)
但netstat告诉我MySQL仍然使用TCP端口3306:
# netstat -tl | grep mys
tcp 0 0 *:mysql *:* LISTEN
Run Code Online (Sandbox Code Playgroud) 我有一个为 unix 域套接字运行的 uwsgi 服务器
[uwsgi]
...
socket = /var/run/someuwsgi.sock
socket = localhost:9987
...
Run Code Online (Sandbox Code Playgroud)
mod_proxy_uwsgi 已安装
在 apache 配置中有这一行:ProxyPass /some uwsgi://localhost:9987
它正在发挥作用。
问题:通过 unix 域套接字 /var/run/someuwsgi.sock 的 apache 配置行应该是什么?我试过
ProxyPass /some uwsgi:///var/run/someuwsgi.sock
Run Code Online (Sandbox Code Playgroud)
并得到
Bad Request
Your browser sent a request that this server could not understand.
Run Code Online (Sandbox Code Playgroud)
也试过
ProxyPass /some uwsgi://unix:///var/run/someuwsgi.sock
Run Code Online (Sandbox Code Playgroud)
并得到
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /some/.
Reason: DNS lookup failure for: unix: …Run Code Online (Sandbox Code Playgroud) 我想通过Unix套接字(而不是localhost)使用Sequelize连接到Postgres 。
Postgres配置为接受来自user的Unix套接字连接pgdba。所有工作都可以从命令行使用进行psql。因此,Pg端已正确配置。
我似乎找不到Sequelize配置来支持Unix套接字。我能找到的最接近用于mysql的mysql,但似乎没有用:
var sequelizeConfig = {
dialect: 'postgres',
dialectOptions: {
socketPath: '/home/pgdba/data/5432/.s.PGSQL.5432',
}
port: 5432
};
var sequelize = new Sequelize('fooDb', 'pgdba', 'passwd', sequelizeConfig);
Run Code Online (Sandbox Code Playgroud)
启动应用程序时出现的错误:
Unable to connect to the database: +23ms { [SequelizeConnectionError: pg_hba.conf rejects connection for host "127.0.0.1", user "pgdba", database "fooDb"]
name: 'SequelizeConnectionError',
message: 'pg_hba.conf rejects connection for host "127.0.0.1", user "pgdba", database "fooDb"',...
Run Code Online (Sandbox Code Playgroud)
显然,sequelize仍在尝试localhost代替Unix套接字,并且pg_hba.conf按配置正确拒绝了它。有没有一种方法可以为Postgres和Unix套接字配置Sequelize?
在Node v5.1.0和Postgresql 9.5.0beta2上使用Sequelize 3.14.2。
我有一些逻辑可以通过创建Unix域套接字来工作,并且在普通应用程序中运行时没有任何问题.但是,当我为app扩展运行时,我从bind()获得了一个带有errno = 48("Address in in use")的-1.
NSArray *applicationSupportDirectoryPaths =
NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES);
int fd = socket(AF_UNIX, SOCK_STREAM, 0); // returns a non-zero value
NSString *loc = [applicationSupportDirectoryPaths[0] stringByAppendingPathComponent:@"usd"];
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX ;
strncpy(addr.sun_path, [loc UTF8String], sizeof(addr.sun_path)-1);
int bindres = bind(fd, (struct sockaddr*)&addr, sizeof(addr)); // returns -1, error is 48
Run Code Online (Sandbox Code Playgroud)
库目录返回的位置是:
/var/mobile/Containers/Data/PluginKitPlugin/A8110BA2-5AE7-42C1-84DA-2A9B303C7277/Library/
Run Code Online (Sandbox Code Playgroud)
我认为这是失败的原因是因为这是一个特殊的位置,与应用程序的库目录相比.
如果有人有任何想法为什么会发生这种情况或任何变通方法,我很感激.
更新:我尝试了缓存目录(NSCachesDirectory),但现在我得到了错误3(没有这样的过程).
我需要将所有流量从指定端口转发到 Apache 中的 Unix 域套接字:
在sites-enabled/000-default.conf我定义了一个VirtualHost:
<VirtualHost *:8091>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
ProxyPassReverse / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在ports.conf我有:
Listen 80
Listen 8091
Run Code Online (Sandbox Code Playgroud)
我同时启用了proxy和proxy_httpmods:
krzysiek:/etc/apache2$ a2enmod proxy
Module proxy already enabled
krzysiek:/etc/apache2$ a2enmod proxy_http
Module proxy already enabled
Run Code Online (Sandbox Code Playgroud)
我正在使用 Apache 2.4.7,官方文档指出:
在 2.4.7 及更高版本中,通过使用前缀为 unix:/path/lis.sock| 的目标,可以支持使用 Unix 域套接字。
当我重新加载 Apache 时,出现错误:
krzysiek:/etc/apache2$ sudo service apache2 restart
* Restarting web server apache2 [fail]
* The apache2 …Run Code Online (Sandbox Code Playgroud) 有谁有使用 PostgREST 和 Cloud SQL 的经验吗?
我的 SQL 实例已准备好开放访问 (0.0.0.0/0),我可以使用云代理应用程序通过本地 PostGREST 访问它。
现在我想从同一个项目的实例运行 Postgrest,但我找不到支持 Cloud SQL 格式的 Postgrest URI 格式,因为 Google SQL Cloud 只使用像 /cloudsql/INSTANCE_CONNECTION_NAME
配置 1
db-uri = "postgres://postgres:password@/unix(/cloudsql/INSTANCE_CONNECTION_NAME)/mydatabase"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
Run Code Online (Sandbox Code Playgroud)
退货 {"details":"could not translate host name \"unix(\" to address: Unknown host\n","code":"","message":"Database connection error"}
配置 2
db-uri = "postgres://postgres:password@/mydatabase?unix_socket=/cloudsql/INSTANCE_CONNECTION_NAME"
db-schema = "api"
jwt-secret = "OOcJ7VoSY1mXqod4MKtb9WCCwt9erJkRQ2tzYmLb4Xe="
db-anon-role = "web_anon"
server-port=3000
Run Code Online (Sandbox Code Playgroud)
解析器拒绝问号
{"details":"invalid URI query parameter: \"unix_socket\"\n","code":"","message":"Database connection error"}
配置 3
db-uri = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Docker 19.03.8 并且想要设置两个容器:
两个容器通过该语句共享同一个网络networks。(我无法将 mysqld 套接字直接绑定安装到 PHP 容器中,因为 MySQL 版本不同,因此 MySQL 容器也不同)。
这是我的docker-compose.yml文件:
...
database:
build: .
volumes:
- /var/run/mysqld/mysqld.sock:/tmp/mysql.sock
...
Run Code Online (Sandbox Code Playgroud)
MySQL的Dockerfile :
FROM mysql:8.0.20
COPY my.cnf /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)
my.cnf文件包含:
...
[mysql]
socket = /tmp/mysql.sock
[mysqld]
socket = /tmp/mysql.sock
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,我从 MySQL 容器收到此错误消息:
2020-05-20T11:30:04.708067Z 0 [ERROR] [MY-010270] [Server] Can't start server : Bind on unix socket: Address already in use
2020-05-20T11:30:04.708406Z 0 [ERROR] [MY-010258] [Server] Do you already …Run Code Online (Sandbox Code Playgroud) 美好的一天,
我正在使用Kubernetes在Google容器引擎上运行容器。
这个想法是在一个容器中运行两个容器。一个容器使用docker mysql映像,另一个容器运行php,laravel,nginx和composer。
在本地,这可行。这个想法是php可以连接到本地主机上的数据库,并且如果两个容器都在同一个容器中,这应该可以工作。但是,启动pod时,我们会在日志中看到以下消息:
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Run Code Online (Sandbox Code Playgroud)
唯一的区别是,在本地测试时,我将localhost更改为内部docker ip。
谢谢,美好的一天