https://github.com/oowl/ngx_stream_socks_module
Socks5 and HTTP proxy server based on nginx stream module implementation.
https://github.com/oowl/ngx_stream_socks_module
c http https nginx proxy socks
Last synced: 6 months ago
JSON representation
Socks5 and HTTP proxy server based on nginx stream module implementation.
- Host: GitHub
- URL: https://github.com/oowl/ngx_stream_socks_module
- Owner: oowl
- License: gpl-3.0
- Created: 2022-01-29T04:53:06.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2023-01-09T14:54:33.000Z (almost 3 years ago)
- Last Synced: 2025-04-15T04:38:26.197Z (8 months ago)
- Topics: c, http, https, nginx, proxy, socks
- Language: C
- Homepage:
- Size: 118 KB
- Stars: 24
- Watchers: 3
- Forks: 2
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ngx_stream_socks_module
## Description
Proxy server based on nginx stream module implementation. It support HTTP and Socks5(TCP) proxy.
## Installation
```
$ cd nginx
$ ./configure --add-module=/path/ngx_stream_socks_module --with-stream
$ make && make install
```
## Configuration directives
### `socks`
- **syntax**: `socks`
- **default**: `-`
- **context**: `server`
Set socks server in current server context.
### `socks_user_passwd`
- **syntax**: `socks_user_passwd user passwd`
- **default**: `-`
- **context**: `stream`,`server`
Add username/password authentication to socks5 server. Adding this conf is like opening the socks5 username/password Authentication. You can use this conf to add multilateral username/password authentication for many times.
### `socks_proxy_bind`
- **syntax**: `socks_proxy_bind address [transparent] | off;`
- **default**: `-`
- **context**: `stream`,`server`
Makes outgoing connections to a socks proxied server originate from the specified local IP address. Parameter value can contain variables (1.11.2). The special value off cancels the effect of the socks_proxy_bind directive inherited from the previous configuration level, which allows the system to auto-assign the local IP address.
### `socks_proxy_socket_keepalive`
- **syntax**: `socks_proxy_socket_keepalive on | off;`
- **default**: `socks_proxy_socket_keepalive off;`
- **context**: `stream`,`server`
Configures the “TCP keepalive” behavior for outgoing connections to a socks proxied server. By default, the operating system’s settings are in effect for the socket. If the directive is set to the value “on”, the SO_KEEPALIVE socket option is turned on for the socket.
### `socks_proxy_buffer_size`
- **syntax**: `socks_proxy_buffer_size size;`
- **default**: `socks_proxy_buffer_size 16k;`
- **context**: `stream`,`server`
Sets the size of the buffer used for reading data from the proxied server. Also sets the size of the buffer used for reading data from the client.
### `socks_proxy_connect_timeout`
- **syntax**: `socks_proxy_connect_timeout time;`
- **default**: `socks_proxy_buffer_size 60s;`
- **context**: `stream`,`server`
Defines a timeout for establishing a connection with a proxied server.
### `socks_proxy_timeout`
- **syntax**: `socks_proxy_timeout time;`
- **default**: `socks_proxy_timeout 10m;`
- **context**: `stream`,`server`
Sets the timeout between two successive read or write operations on client or proxied server connections. If no data is transmitted within this time, the connection is closed.
### `socks_proxy_upload_rate`
- **syntax**: `socks_proxy_upload_rate rate;`
- **default**: `socks_proxy_upload_rate 0;`
- **context**: `stream`,`server`
Limits the speed of reading the data from the client. The rate is specified in bytes per second. The zero value disables rate limiting. The limit is set per a connection, so if the client simultaneously opens two connections, the overall rate will be twice as much as the specified limit.
### `socks_proxy_download_rate`
- **syntax**: `socks_proxy_download_rate rate;`
- **default**: `socks_proxy_download_rate 0;`
- **context**: `stream`,`server`
Limits the speed of reading the data from the proxied server. The rate is specified in bytes per second. The zero value disables rate limiting. The limit is set per a connection, so if nginx simultaneously opens two connections to the proxied server, the overall rate will be twice as much as the specified limit.
## Variables
### `$socks_connect_addr`
socks connect contain addr and port
### `$socks_name`
socks auth user name in current connection
### `$socks_passwd`
socks auth password in current connection
### `$socks_protocol`
proxy protocol in current connection
## Usage
```
stream {
resolver 8.8.8.8 ipv6=off;
log_format socks 'socks: $socks_connect_addr $socks_name $socks_passwd $socks_protocol';
server {
listen 0.0.0.0:22345;
socks;
socks_user_passwd ;
socks_user_passwd ;
access_log socks_access.log socks;
}
}
```