Nginx配置达梦数据库代理及Nginx模块内容总结
Nginx 代理达梦数据库配置
叨叨
由于公司网络安全问题,应用服务器端开开放需要走策略申请,虽安全但开发来讲流程确实有点麻烦。因此,申请一个对外开放的Nginx端口供大家访问。用其代理所有,all~~~~~
达梦数据库代理
网上内容很多,都OK,达梦数据库连接属于TCP连接,因些做nginx配置时注意用stream即可。配置如下所示:
stream {
upstream dm_database {
server 1270.0.1:5236; # 替换为达梦数据库服务器的IP和端口
}
server {
listen 8080; # 替换为Nginx监听的端口
proxy_pass dm_database;
}
}
请注意,该节点 与http并列,并不配在http中。这样即可。简单吧,快去试试吧
Nginx模块说明
都写到这了,叨叨下Nginx各模块说明吧
stream模块
这个模块用于TCP/UDP数据流的代理和负载,可用stream代理转发TCP消息。该模块配置与http平级,使用相似,本文数据库代理就用的该模块。语法与http模块基本相同,但要注意的是
确保在Nginx编译时包含了–with-stream模块,以启用stream处理功能。以下示例:
stream {
upstream backend {
server backend1.example.com:12345;
server backend2.example.com:12345;
}
server {
listen 12345;
proxy_pass backend;
proxy_connect_timeout 1s;
}
}
在这个配置中,Nginx监听在本地12345端口上的连接请求,并将它们代理到名为backend的上游组,该上游组包含两个后端服务器。proxy_connect_timeout指定了到后端服务器的连接超时时间。
以下是一个完整的示例,参考 https://www.jianshu.com/p/1848c1b71a0d。
user nginx;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 65535;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 102400;
accept_mutex on;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
log_format format1 '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_x_forwarded_for $upstream_cache_status $request_time';
access_log logs/access.log format1;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 4 8k;
client_max_body_size 8m;
#sendfile on;
#tcp_nopush on;
keepalive_timeout 60s;
#tcp_nodelay on;
client_header_timeout 25s;
client_body_timeout 25s;
send_timeout 25s;
gzip on;
gzip_min_length 2k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 7;
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/ico;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_buffer_size 128k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /nginx_status
{
stub_status on;
access_log off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 各个域名单独控制
include conf.d/*.conf;
}
stream {
server {
listen 9898;
proxy_pass 192.168.0.202:9999;
}
}
main 全局块
此模块顾名思义为主配置,作用会影响Nginx服务器整体运行的配置指令,放在Nginx最顶层,从配置文件开始到events块之间的内容。主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存储路径和类型以及配置文件的引入等。作用域是全局的。
- user:配置运行Nginx服务器用户(组)
- worker_processes:指定Nginx要启动的工作进程的数量。worker_processes 1:的意思是:Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
- Nginx进程
- error_log:指定错误日志的位置和日志级别。
- pid:指定Nginx pid文件的位置。
- events:包含影响Nginx服务器或与网络有关的事件模块指令。
示例如下所示:
user nginx; # 指定运行Nginx的用户和用户组
worker_processes auto; # 设置工作进程数为自动设置
error_log /var/log/nginx/error.log warn; # 错误日志位置和日志级别
pid /var/run/nginx.pid; # PID文件位置
events {
worker_connections 1024; # 每个工作进程的最大连接数
}
http {
# http模块内容,包括服务器配置等
...
}
event块
主要作用是Nginx服务器与用户的网络连接信息。Nginx的事件处理机制对应不同的操作系统有不同的实现,例如kqueue、epoll、poll等。通过Nginx的命令行参数查看event模块你也可以通过查看Nginx的命令行参数来查看Nginx使用的是哪种event模块。
例如,你可以运行以下命令:
如果你想要查看Nginx的event模块是哪个,你可以通过查看Nginx的配置参数来获取。
示列1:
events {
use kqueue; # 例如这是在Mac OS X中的配置
# use epoll; 例如这是在Linux中的配置
worker_connections 1024; #每个进程允许的最多连接数
}
http块
这个开发同学用的最多,处理http请求和响应的核心组件,负责接收客户端请求并向客户端发向应。 http模块负责HTTP服务器相关属性的配置,有server和upstream两个子模块
- include :来用设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,来告诉nginx来识别文件类型。
- default_type:设定了默认的类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置asp的locate环境时,Nginx是不予解析的,此时,用浏览器访问asp文件就会出现下载了。
- log_format:用于设置日志的格式,和记录哪些参数,这里设置为main,刚好用于access_log来纪录这种类型。
示 例如下所示:
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
}
server块
该块是包在http块中的,每个http块中有多个server块,每个server块可以认为是一个 虚拟主机。sever块用来定一个虚拟主机,标志定义虚拟主机开始。虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。每个server块又分全局server块,它可以基于域名、IP地址、端口或者组合来处理请求。还可包括多个location块
- listen:用于指定虚拟主机的服务端口
- server_name:用来指定IP地址或者域名,多个域名之间用空格分开。
- root :表示在这整个server虚拟主机内,全部的root web根目录。注意要和locate {}下面定义的区分开来。
- index :全局定义访问的默认首页地址。注意要和locate {}下面定义的区分开来。
- charset:用于设置网页的默认编码格式。
- access_log:用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。
示例如下
http {
server {
listen 80;
server_name localhost;
root /Users/hk/www;
index index.php index.html index.htm;
charset utf-8;
access_log logs/host.access.log main;
aerror_log logs/host.error.log main;
}
}
location块
Nginx的location模块用于定义如何处理特定的请求URI。通过配置location,可以控制哪些URI被Nginx处理,以及如何处理这些URI。主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。location模块 负载均衡,反向代理,虚拟域名等配置。是来定位的,定位URL,解析URL,它也提供了强大的正则匹配功能,也支持条件判断匹配,可以通过location指令实现Nginx对动,静态网页进行过滤处理。
- /表示匹配访问根目录。
- root指令用于指定访问根目录时,虚拟主机的web目录,这个目录可以是相对路径(相对路径是相对于nginx的安装目录)。也可以是绝对路径。
- proxy_pass:代理转发,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
- proxy_set_header:允许重新定义或者添加发往后端服务器的请求头。
- include:加载配置文件,后面介绍nginx多个配置文件时候会提到。
- root:定位localtion匹配的url资源路径。
- index:定义页面显示html,一般和alias配合使用。
示例1如下所示:
location = / {
# 处理根目录(/)的请求
}
location /images/ {
# 处理请求URI开始为/images/的请求
}
示例二如下
location / {
root html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#反向代理配置
location /jyb {
proxy_pass http://qurt/;
proxy_read_timeout 1800s;
proxy_set_header Host $host:$server_port;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
#采用uwsgi方式
location /python/ {
include uwsgi_params;
uwsgi_pass 127.0.0.1:33333;
}
# FastCGI方式
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
#访问nginx本机目录的文件
location / {
root /home/hk/;
index index.html index.htm;
}
location /static/ {
alias /var/static/;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
server {
listen 8000;
listen somename:8080;
server_name somename alias another.alias;
location / {
root html;
index index.html index.htm;
}
}
# HTTPS server
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
本文参考了 https://blog.csdn.net/qq_42402854/article/details/132843413
trobleshooting && summary
1、Nginx 同时安装多个模块
1.系统缺少stream模块,需要自行安装, 同时安装stream和open-ssl ,即开启tcp代理和HTTPS。命令如下
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream --with-http_ssl_module
make && make install
注:该操作需要注意同时安装,可加—with-stream --with-http_ssl_module ,因为每次执行会覆盖执行,所以先用with装一个,再装另一个的时候,每次通过nginx -V 查看时,只能看到一个模块安装成功。
2、Nginx 查看安装了哪些模块
查看Nginx安装了哪些模块,可用 nginx -V 查看,如下图所示:
3. 给nginx授权启动命令及非root用户特权端口80
以下命令可以授权非root用户也可启动nginx。同时,如果在Linux下想nginx监听80端口,也可以用下面授权命令。Linux对小于1024以下的端口是有访问限制的,小于1024以下的端口认为是特权端口,普通用户是无法进行启动的,比如我用堡垒机的appuser用户,无法启动nginx 监听80端口。否则会报错如下所示:
因此为了解决Linux操作系统下非root用户访问特权端口(小于1024的端口)问题,需要执行以下命令授权。
# 使非 root 用户,可以启动 nginx
chown root /usr/local/nginx/sbin/nginx
chmod u+s /usr/local/nginx/sbin/nginx
chmod u+s 主要是用于给文件设置setuid位,setuid位允许程序以执行该文件的用户的权限运行,而不是执行该文件的用户的权限运行。
注:但需要注意的事,nginx 在Linux下执行上面命令授权启动后,通过netstat -antp命令无法查到进程信息。即在PID下面看不到进程号了。
4. 小tip用Python起一个端口测试命令
以下命令可以通过python模拟一个新端口进行端口端到端的测试
python -m SimpleHTTPServer 8090

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)