由于公司网络安全问题,应用服务器端开开放需要走策略申请,虽安全但开发来讲流程确实有点麻烦。因此,申请一个对外开放的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各模块说明吧
这个模块用于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;
}
}此模块顾名思义为主配置,作用会影响Nginx服务器整体运行的配置指令,放在Nginx最顶层,从配置文件开始到events块之间的内容。主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存储路径和类型以及配置文件的引入等。作用域是全局的。
示例如下所示:
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模块内容,包括服务器配置等
...
}主要作用是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服务器相关属性的配置,有server和upstream两个子模块
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;
} 该块是包在http块中的,每个http块中有多个server块,每个server块可以认为是一个 虚拟主机。sever块用来定一个虚拟主机,标志定义虚拟主机开始。虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。每个server块又分全局server块,它可以基于域名、IP地址、端口或者组合来处理请求。还可包括多个location块
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;
}
}Nginx的location模块用于定义如何处理特定的请求URI。通过配置location,可以控制哪些URI被Nginx处理,以及如何处理这些URI。主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。location模块 负载均衡,反向代理,虚拟域名等配置。是来定位的,定位URL,解析URL,它也提供了强大的正则匹配功能,也支持条件判断匹配,可以通过location指令实现Nginx对动,静态网页进行过滤处理。
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;
}
}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 查看时,只能看到一个模块安装成功。
查看Nginx安装了哪些模块,可用 nginx -V 查看,如下图所示:

以下命令可以授权非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/nginxchmod u+s 主要是用于给文件设置setuid位,setuid位允许程序以执行该文件的用户的权限运行,而不是执行该文件的用户的权限运行。
注:但需要注意的事,nginx 在Linux下执行上面命令授权启动后,通过netstat -antp命令无法查到进程信息。即在PID下面看不到进程号了。
以下命令可以通过python模拟一个新端口进行端口端到端的测试
python -m SimpleHTTPServer 8090