nginx 预研及应用 一、通过源码构建nginx 使用该 configure
命令配置构建。它定义了系统的各个方面,包括允许nginx用于连接处理的方法。最后它创建了一个 Makefile
。
configure
命令支持以下参数:
–help 打印帮助信息
–prefix=path 定义了一个存储nginx服务文件的目录。默认/usr/local/nginx
–sbin-path=path 指定了nginx可执行文件的名字,该名字通常在安装的时候被使用,默认名是:prefix/sbin/nginx
–modules-path=path 定义了nginx动态模块安装的目录,默认是 :prefix/modules
–conf-path=path 设置 nginx.conf
配置文件的名字,如果需要,nginx可以指定不同的配置文件启动,默认是 prefix/conf/nginx.conf
–error-log-path=path 设置错误、警告的日志文件路径,安装之后可以在 nginx.conf
配置文件中 error_log
指令可以指定错误日志路径。默认的文件是:prefix/logs/nginx.pid
–pid-path=path 设置 nginx.pid
文件的路径,该文件将用来存储主进程的进程id。默认prefix/logs/nginx.pid
–lock-path=path 设置lock文件的路径,安装完成之后也可以在 nginx.conf
中直接通过 lock_file
改变lock文件指向的路径。默认 prefix/logs/nginx.pid
–user=name 设置未授权用户的名字,这些用户可以被 worker
进程所使用。安装之后,这个名字可以被 nginx.conf
配置文件中 user
所改变。
–group=name 设置组的名字,这些组的权限将会被 worker
进程所使用。安装之后,这个名字可以被 nginx.conf
配置文件中 user
所改变。默认情况下,组名被设置为未授权用户的名字。
–build=name 设置一个可选的nginx build 名称。
–builddir=path 设置一个构建目录。
–with-select_module
–without-select_module 模块(使服务以 select()
方法启动)有效或无效。如果nginx 运行没有出现合适的方法,诸如:kquene,epull,or /dev/poll。
–with-poll_module
–without-poll_module 模块(使服务以 poll()
方法启动)有效或无效。如果nginx 运行没有出现合适的方法,诸如:kquene,epull。
–with-threads 使线程池的使用生效
–with-file-aio 基于 FreeBSD and Linux
的异步IO生效或失效。
–with-http_ssl_module 构建支持https的服务模块。这个模块不是默认的。运行该模块OpenSSL
库是必须的。
–with-http_image_filter_module
–with-http_image_filter_module=dynamic 允许构建以jpeg、gif、png和webp格式转换图像的 ngx_-http_-image_-filter_module
。默认情况下不生成此模块。
–with-http_geoip_module
–with-http_geoip_module=dynamic 可以构建ngx_http_geoip_module
根据客户端ip地址来创建创建变量,并且重新编译MaxMind
,这个模块默认是不被创建的。
–with-http_sub_module 可以构建ngx_http_sub_module
模块,该模块可以将响应中指定的字符串被另一个替换,该模块默认是不被创建的。
–with-http_dav_module 构建该模块提供通过WebDAV
协议实现文件自动管理,该模块默认是不被创建的。
–with-http_flv_module 构建该模块对服务端的Flash Video (FLV)提供伪视频流技术,该模块默认是不会被构建的。
–with-http_mp4_module 构建该模块对服务端的MP4 文件提供伪视频流技术,该模块默认不被构建。
–with-http_gunzip_module 构建该模块可以让解压响应头带有“Content-Encoding: gzip”的文件,而不需要客户端支持“gzip”编码方法。
–with-http_gzip_static_module 构建该模块能够发送“.gz”后缀的预压缩文件取代常规文件。该模块默认不被构建。
–with-http_auth_request_module 支持客户端依据之前请求结果授权,该模块默认不被构建。
–with-http_random_index_module enables building the ngx_http_random_index_module module that processes requests ending with the slash character (‘/’) and picks a random file in a directory to serve as an index file. This module is not built by default.
–with-http_secure_link_module
–with-http_degradation_module 构建ngx_http_degradation_module
模块,该模块默认未被构建。
–with-http_slice_module 将一个请求分为若干子请求,每个子请求返回确定范围的响应。该模块实现针对响应数据较大数据的缓存。该模块默认是不被构建的。
–with-http_stub_status_module 访问基础的状态信息,默认不被构建
–without-http_charset_module 使ngx_http_charset_module
失效,上述模块将指定字符集添加到“Content-Type”响应头当中,可以将响应的字符集转换成另一个字符集。
–with-stream
–with-stream=dynamic 构建该模块可以普通的 TCP/UDP 代理和负载均衡,该模块默认不被构建。
–with-stream_ssl_module 添加 SSL/TLS protocol support 协议支持,默认不被构建。
–with-stream_geoip_module
–with-stream_geoip_module=dynamic
demo:
1 ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre-8.43 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.1b
编译实战: 1、下载nginx源码 nginx-release-1.16.0.tar.gz downloadUrl: wget http://nginx.org/download/nginx-1.16.0.tar.gz 2、下载zlib源码 zlib-1.2.11.tar.gz downloadUrl: http://www.zlib.net/ 3、下载pcre源码 pcre-8.42.tar.gz downloadUrl: https://ftp.pcre.org/pub/pcre/ 3、下载opensll源码 openssl-1.1.1b.tar.gz downloadUrl: https://www.openssl.org/source/old/1.1.1/openssl-1.1.1b.tar.gz 4、解压各文件,和nginx 同级目录,执行下列命令:
1 2 ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre-8.42 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.1b make && make install
附nginx目录: . ├── client_body_temp [error opening dir] ├── fastcgi.conf ├── fastcgi.conf.default ├── fastcgi_params ├── fastcgi_params.default ├── fastcgi_temp [error opening dir] ├── html │ ├── 50x.html │ └── index.html ├── koi-utf ├── koi-win ├── logs │ ├── access.log │ └── error.log ├── mime.types ├── mime.types.default ├── nginx ├── nginx.conf ├── nginx.conf.default ├── nginx.pid ├── proxy_temp [error opening dir] ├── scgi_params ├── scgi_params.default ├── scgi_temp [error opening dir] ├── uwsgi_params ├── uwsgi_params.default ├── uwsgi_temp [error opening dir] └── win-utf
一、使用者手册 该手册对nginx作简要介绍,并描述了nginx可以做的任务,使用该手册的前提是读者已在pc安装了nginx。如果没有,请查看安装nginx 页面。这个手册描述了如何启动和关闭nginx、如何重新加载配置、描述其配置文件的配置文件架构、描述设置静态服务器的配置、如何配置代理服务、如何用FastCGI application
来连接。 nginx 有一个 master
集成和多个worker
进程。master
主要作用是读取和解析配置以及维持worker
进程。worker
进程是处理真实的请求进程。nginx 依赖事件驱动模型(event-based)和操作系统来高效地分发请求到worker
进程中。worker
进程地数量被定义在配置文件中,可以通过调整cpu核心的数量来修改(详见worker_processes
)。 默认,配置文件名nginx.conf
,被放置在/usr/local/nginx/conf
, /etc/nginx
, or /usr/local/etc/nginx
。
启动、关闭、重新加载配置 直接通过可执行文件启动nginx。一旦启动,就可以通过可执行文件传参 -s
的方式来控制nginx。使用语法如下:
nginx -s signal
signal,有如下参数:
stop - 快速关闭
quit - 优雅关闭
reload - 加载配置文件
reopen - 重新打开日志文件 例如,停止nginx 进程,要等待worker
进程完成当前的请求,可以使用如下命令:
nginx -s quit 注意:该命令执行应该使用开启该nginx的用户。
配置文件的改变只能通过nginx重新加载配置或重启nginx生效。重新加载配置,执行如下:
nginx -s reload
一旦master
进程接收到了重新加载配置的信号,它会校验配置文件语法,并尝试去应用配置。如果配置成功,master
会创建新的worker
并通知旧的worker
进程去关闭。否则,master
进程会回滚当前的改变到历史配置,继续使用旧的配置。旧worker
进程接收到命令去关闭,会停止接收新的请求并将现有的请求处理完成后,才完成退出动作。
使用Unix 的工具kill 工具信号也可以发给nginx 进程。这种情况,带有进程id的信号直接发送给一个进程。这个进程id是被nginx master
进程所重写,默认情况下 nginx.pid
在目录/usr/local/nginx/logs
或者 /var/run
。例如,如果master 进程id 是1628,发送退出信号去优雅地关闭nginx,可执行:
kill -s QUIT 1628
为了获取nginx 进程id地列表,ps
工具被使用,例如:
ps -ax | grep nginx
更多信号发送到nginx,详看Controlling nginx
配置文件结构 nginx 包含很多模块,而这些模块是在配置文件中被特定地指令所控制。指令包括简单指令和指令块。一个简单地指令包含被空格分隔的名字和参数,以分号(;)结尾。指令块有和简单指令一样的结构,除了没有分号结尾以及额外的指令被花括号所包括({ and })。如果指令块在指令中有其他指令,则称之为上下文(例如 events, http, server, 和 location)。 指令被放置到所有context是被当作在main
上下文中。events
和http
指令是在main
上下文中,server
指令在http
上下文中,location
在server
上下文中。剩下的一行#
注释。
静态资源服务 web 服务器最重要的一个任务就是发布一个文件服务(像图片或者静态html文件)。你能够实现将本地文件映射到网络url,可以直接通过请求访问文件。下面的示例是要实现/data/www
(存放html静态资源) 和 /data/images
(包含图片),这需要编辑配置文件,在http 指令块下 server 指令块下 添加两个location 指令块。。 首先创建 /data/www
目录,然后放一个html文件,然后再在/data/images
文件夹下放置些图片供测试。 接下来,打开配置文件,默认的配置已经包含了几个 server
块的示例,将注释打开创建一个新的server
指令块。
通常这个配置文件会包含多个server
块,而这些server
是通过它们监听的端口和服务名称来加以区分。一旦nginx 确定哪一个server
处理请求,它会测试请求头中的参数和location
中配置的server
中定义是否匹配。 添加location
块到server
块当中。
1 2 3 location / { root /data/www; }
这个locaiton
块定义了“/”前缀和请求的URI做匹配。对于匹配的请求,这个URI将会被添加到root
指令中重定向路径的后面,上述demo即是转向 /data/www
,以形成本地文件系统上所请求的路径。如果匹配多个location块,则nginx选择具有最长前缀的块。location上面提供长度为1的最短前缀,因此只有当所有其他location 块都无法提供匹配时,才会使用此块。
接下来添加第二个 location
块
1 2 3 location /images/ { root /data; }
它将会匹配以/images/
开头的请求路径(location/
也能匹配上,但是匹配前缀更短)。
而最终的server
块的配置如下:
1 2 3 4 5 6 7 8 9 server { location / { root /data/www; } location /images/ { root /data; } }
上述已经运行的配置监听80端口,可以铜鼓http://localhost/
加以访问。为了响应url 以/images/
开头的请求,nginx服务端将会发送/data/images
目录下的文件。例如为了响应http://localhost/images/example.png
,nginx会发送/data/images/example.png
文件。如果这个文件不存在,就会返回404错误。以/images/
开头的URIs路径将会映射到/data/www
目录下。为了响应请求http://localhost/some/example.html
, nginx将会发送/data/www/some/example.html
文件。为了使新的配置生效,需要发送reload
信号到nginx 的master进程。通过执行:
如果加载出现了问题,你可以在access.log
和error.log
中查找问题。文件路径/usr/local/nginx/logs
或 /var/log/nginx
。
设置一个简单的代理服务 代理服务是nginx最常使用的一个功能,就是意味着nginx作为一个服务器接收请求,让他们去访问被代理的服务器,从被代理的服务器检索响应,并将他们转发到客户端。 我们将会配置一个基础的代理服务,请求的图片文件都来自于本地目录,其他请求发送到一个被代理的服务器。在这个例子中,两个服务都会被定义到一个简单的nginx实例中。 首先,通过添加一个或多个server
块来定义被代理的服务。
1 2 3 4 5 6 7 server { listen 8080 ; root /data/up1; location / { } }
上述配置监听8080端口,并且映射所有请求到/data/up1
目录。创建这个目录,并把index.html
文件放进去。注意root
指令需要放置到location
块中。这个root
生效要求location
块被选择,并且location
块中没有root
指令。
接下来使用来自现在的配置,修改它作为一个代理服务器。在第一个location块,配置proxy_pass
指令,参数配置协议、名称、端口以及被代理的服务。
1 2 3 4 5 6 7 8 9 server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
我们将修改第二个location
块,它将会映射请求以/images/
开头的请求到本地磁盘/data/images
目录下,为了使之匹配图片资源,可配置如下:
1 2 3 location ~ \.(gif|jpg|png)$ { root /data/images; }
这个参数正则匹配所有以.gif
、.jpg
或者 .png结尾的
URIs。一个正则表达式应该以~
开头,该请求将会被映射到目录/data/images
下。 当nginx选择了一个location
块来服务一个请求,首先它会校验location
指令指定的前缀,记住location
指令匹配最长路径,然后校验正则。如果匹配到了正则,nginx将会挑选该location
块,否则会选择之前记下来的模块。 最终的配置如下:
1 2 3 4 5 6 7 8 9 server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
启动FastCGI代理 nginx也经常被使用路由请求到FastCGI
服务器,FastCGI
服务器可以运行多种框架和编程语言,比如PHP
。 最基础简单的配置,使用fastcgi_pass
取代proxy_pass
,改变参数到9000。在php中,SCRIPT_FILENAME
被使用决定脚本名称,QUERY_STRING
设置请求参数,结果配置如下:
1 2 3 4 5 6 7 8 9 10 11 server { location / { fastcgi_pass localhost:9000 ; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; fastcgi_param QUERY_STRING $query_string ; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
代理缓存 完整示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 worker_processes 2 ;events { worker_connections 1024 ; } http { include mime.types; default_type application/octet-stream; proxy_cache_path /data/nginx/cache levels=1 :2 keys_zone=cache:10m inactive=24h max_size=1g use_temp_path=off ; sendfile on ; keepalive_timeout 65 ; server { listen 80 ; server_name localhost; location / { root html; index index.html index.htm; } location /www { alias /data/; } location /images/ { root /data; } location ~ ^/nginxdemo { proxy_pass http://nginxdemoserver; proxy_cache cache; proxy_cache_valid 200 304 12h ; proxy_cache_valid any 10m ; add_header Nginx_Cache "$upstream_cache_status " ; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } upstream nginxdemoserver { least_conn; server 10.211.55.4:8080 weight=1 ; server 10.211.55.4:8082 weight=1 ; } }
websocket代理 为了将基于HTTP/1.1协议的客户端和服务端连接转换成websocket,请使用HTTP/1.1协议所提供的协议转换机制。
然而,有一个微妙之处:由于“Upgrade”是 hop-by-hop 请求头,因此它不会从客户端传递到代理服务器。通过转发代理,客户端可以使用该CONNECT
方法来规避此问题。但是,这不适用于反向代理,因为客户端不知道任何代理服务器,并且需要在代理服务器上进行特殊处理。
从版本1.3.13开始,nginx实现了特殊的操作模式,如果代理服务器返回带有代码101(交换协议)的响应,则允许在客户端和代理服务器之间建立通道,并且客户端要求通过请求中的“Upgrade”请求头。
如上所述,包括“Upgrade” 和 “Connection”的hop-by-hop不会从客户端传递到代理服务器,因此为了让代理服务器知道客户端将协议切换到WebSocket的意图,这些报头必须明确传递:
1 2 3 4 5 6 location /chat/ { proxy_pass http://backend; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection "upgrade" ; }
一个更为复杂的配置,取决于“Connection”请求头的值取决于客户端请求是否有“Upgrade”请求头,下demo中如果$http_upgrade
是default
,则$connection_upgrade
设置为upgrade
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { location /chat/ { proxy_pass http://backend; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection $connection_upgrade ; } }
默认情况下,如果代理服务器在60秒内未传输任何数据,则将关闭连接。
demo:
1 2 3 4 5 6 7 8 9 10 11 location ~ ^/websocket/gs-guide-websocket/ { proxy_pass http://websocketsserver; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection "Upgrade" ; proxy_set_header Origin '' ; proxy_set_header Remote_addr $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_read_timeout 600s ; }
nginx 动态添加模块,平滑升级: 例如上述配置不支持缓存代理:通过平滑升级实现缓存代理: 1、如果需要下载第三方源码包编译便下载源码包,此处不需要,在nginx的core
模块中,只需要重新编译 2、查看nginx编译了哪些模块
1 2 nginx -Vconfigure arguments: --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre-8 .42 --with-zlib=../zlib-1 .2 .11 --with-openssl=../openssl-1 .1 .1b
再编译:
1 2 3 4 5 6 7 8 9 10 $ ./configure \ --prefix=/usr/local/nginx \ --with-zlib=../zlib-1.2.11 \ --with-pcre=../pcre-8.42 \ --with-http_ssl_module \ --with-openssl=../openssl-1.1.1b \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp $ make //注意,不要make install
替换nginx二进制文件
1 2 $ cp /usr/local /nginx/nginx /usr/local /nginx/nginx.bak $ cp ./objs/nginx /usr/local /nginx/nginx
再次确认是否成功安装
1 $ /usr/local/nginx/nginx -V
至此nginx重新编译添加模块成功。
代理缓存 完整示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 worker_processes 2 ;events { worker_connections 1024 ; } http { include mime.types; default_type application/octet-stream; proxy_cache_path /data/nginx/cache levels=1 :2 keys_zone=cache:10m inactive=24h max_size=1g use_temp_path=off ; sendfile on ; keepalive_timeout 65 ; server { listen 80 ; server_name localhost; location / { root html; index index.html index.htm; } location /www { alias /data/; } location /images/ { root /data; } location ~ ^/nginxdemo { proxy_pass http://nginxdemoserver; proxy_cache cache; proxy_cache_valid 200 304 12h ; proxy_cache_valid any 10m ; add_header Nginx_Cache "$upstream_cache_status " ; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } upstream nginxdemoserver { least_conn; server 10.211.55.4:8080 weight=1 ; server 10.211.55.4:8082 weight=1 ; } }
附成都现场nginx配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 worker_processes 2 ;events { worker_connections 1024 ; } http { include mime.types; default_type application/octet-stream; client_max_body_size 100m ; sendfile on ; keepalive_timeout 65 ; server { listen 8091 ; server_name localhost 10.1.233.73 ; access_log logs/host.access.log ; location ~ ^/dgpCD-server-web { proxy_pass http://10.1.233.73:8081; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } } server{ listen 8080 ssl; server_name localhost 10.1.233.73 ; ssl_certificate ssl/2220425__cdmpnr.cn.pem; ssl_certificate_key ssl/2220425__cdmpnr.cn.key; ssl_session_tickets on ; charset utf-8 ; location ~ ^/dasc-sso/(.*)$ { proxy_pass http://cas_server/dasc-sso/$1 $is_args $args ; proxy_redirect http:// https://; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location ~ ^/dgpCD-server-web { rewrite ^/(dgpCD-server-web)$ $scheme ://$host :$server_port /$1 / permanent ; proxy_pass http://dgpcd_server; proxy_redirect http:// https://; 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-Scheme https; proxy_set_header X-FORWARDED-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location ~ ^/websocket/gs-guide-websocket/ { proxy_pass http://websocketsserver; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection "Upgrade" ; proxy_set_header Origin '' ; proxy_set_header Remote_addr $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_read_timeout 600s ; } location /websocket { rewrite ^/(.*)(websocket)$ $scheme ://$host :$server_port /$2 / permanent ; proxy_redirect http:// https://; proxy_pass http://websocketsserver; 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-Scheme https; proxy_set_header X-FORWARDED-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; proxy_set_header Upgrade-Insecure-Requests 1 ; } location ~ ^/dgm-server-web { proxy_pass http://dgmcd_server; proxy_redirect http:// https://; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location ~ ^/cdoms { rewrite ^/(.*)(cdoms)$ $scheme ://$host :$server_port /$2 / permanent ; proxy_pass http://cdoms_server; proxy_redirect http:// https://; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location ~ ^/MasterEvalutionBase { proxy_pass http://master; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location ~ ^/web_static { proxy_pass http://web_static; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /api { proxy_pass http://calcuApi; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /dghycdzg { proxy_pass http://dghycdzg; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /dghycdzb { proxy_pass http://dghycdzb; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /Proxy.ashx { proxy_pass http://Proxy; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /dascService { proxy_pass http://dascService; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /dasc { rewrite ^/(dasc)$ $scheme ://$host :$server_port /$1 / permanent ; proxy_pass http://dasc; 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-HOST $server_addr ; proxy_set_header X-FORWARDED-PORT $server_port ; } location /CDMD { index index.html; try_files $uri $uri / /index.html; root E:/Software/nginx-1 .16 .0 /statics; } location /CDZG { index index.html; try_files $uri $uri / /index.html; root E:/Software/nginx-1 .16 .0 /statics; } location /UPRSMS { index index.html; try_files $uri $uri / /index.html; root E:/Software/nginx-1 .16 .0 /statics; } location /dgp_js_api319 { index index.html; try_files $uri $uri / /index.html; root E:/Software/nginx-1 .16 .0 /statics; } } upstream websocketsserver { ip_hash; server 10.1.233.73:8081 weight=1 ; server 10.1.233.73:8079 weight=1 ; } upstream load_balance_server{ ip_hash; server 10.1.233.73:8081 weight=1 fail_timeout=20s ; server 10.1.233.73:8081 weight=1 fail_timeout=20s ; } upstream dgpcd_server { server 10.1.233.73:8079 weight=1 ; server 10.1.233.73:8081 weight=1 ; } upstream dgmcd_server { ip_hash; server 10.1.233.73:8079 weight=1 ; server 10.1.233.73:8081 weight=1 ; } upstream cas_server { server 10.1.233.75:8090 weight=1 ; } upstream cdoms_server { server 10.1.233.75:8080 weight=1 ; } upstream master { ip_hash; server 10.1.233.73:8079 weight=1 ; server 10.1.233.73:8081 weight=1 ; } upstream UPRSMS { ip_hash; server 10.1.233.73:8079 weight=1 ; server 10.1.233.73:8081 weight=1 ; } upstream front_resource { server 10.1.233.73:8081 weight=1 ; } upstream web_static { server 10.99.34.8:80 weight=1 ; } upstream calcuApi { server 10.1.233.77:8888 weight=1 ; } upstream dghycdzg { server 10.1.233.77:81 weight=1 ; } upstream dghycdzb { server 10.1.233.77:81 weight=1 ; } upstream Proxy { server 10.1.233.73:83 weight=1 ; } upstream dascService { server 10.1.233.75:8090 weight=1 ; } upstream dasc { server 172.25.16.8:8090 weight=1 ; } }