- nginx初始化
- docker拉取nginx镜像
- 实例化nginx镜像
- 启动nginx
- nginx常用命令
- 查看nginx版本号
- 关闭nginx
- 启动nginx
- 重新加载nginx
- nginx配置文件
- 全局块
- events块
- http块
- http全局块
- server块
- nginx配置反向代理
- 简单代理
- 复杂代理
- nginx配置负载均衡
- 轮询
- weight
- ip_hash
- fair(第三方)
- nginx配置动静分离
[root@Dragon ~]# dk pull nginx实例化nginx镜像
[root@Dragon ~]# dk run -it --name nginx1 -p 80:80 nginx /bin/bash WARNING: IPv4 forwarding is disabled. Networking will not work.
有一个警告意思是ipv4的转发未开启先不管
启动nginx找一下启动文件
root@65493cd4789a:/usr/local/sbin# find / -name nginx /etc/default/nginx /etc/init.d/nginx /etc/logrotate.d/nginx /etc/nginx find: '/proc/1/map_files': Operation not permitted find: '/proc/11/map_files': Operation not permitted /usr/lib/nginx /usr/sbin/nginx /usr/share/doc/nginx /usr/share/nginx /var/cache/nginx /var/log/nginx
/usr/sbin/nginx看起来比较像
root@65493cd4789a:/usr/local/sbin# cd /usr/sbin root@65493cd4789a:/usr/sbin# ./nginx 2021/10/26 12:47:04 [notice] 13#13: using the "epoll" event method 2021/10/26 12:47:04 [notice] 13#13: nginx/1.21.3 2021/10/26 12:47:04 [notice] 13#13: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/26 12:47:04 [notice] 13#13: OS: Linux 3.10.0-1160.el7.x86_64 2021/10/26 12:47:04 [notice] 13#13: getrlimit(RLIMIT_NOFILE): 1048576:1048576
有几行notice先不管
查看nginx配置文件
root@65493cd4789a:/usr/sbin# find / -name nginx.conf /etc/nginx/nginx.conf find: '/proc/1/map_files': Operation not permitted find: '/proc/14/map_files': Operation not permitted find: '/proc/15/map_files': Operation not permitted find: '/proc/19/map_files': Operation not permitted root@65493cd4789a:/usr/sbin# cat /etc/nginx/nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
在宿主机浏览器顺利访问到nginx的welcome页面
nginx常用命令nginx命令需要在nginx的目录下才能使用
查看nginx版本号root@e137e425fbf3:/usr/sbin# ./nginx -v nginx version: nginx/1.21.3关闭nginx
root@e137e425fbf3:/usr/sbin# ./nginx -s stop 2021/10/26 13:47:45 [notice] 42#42: signal process started启动nginx
./nginx重新加载nginx
可加载配置文件里的内容
./ nginx -s reloadnginx配置文件
先创建nginx的容器数据卷
在root/nginx目录下创建www、logs、conf目录
- conf:nginx配置文件目录
- logs:nginx日志目录
- www:nginx存储网站网页目录
拷贝配置文件到本地
[root@Dragon ~]# dk cp nginx1:/etc/nginx/nginx.conf /root/nginx/conf
创建新的容器并将www、logs、conf目录映射到本地
docker run -d -p 80:80 --name d_nginx -v /root/nginx/www:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx
这样就可以在容器外编辑配置文件了
配置文件由四部分组成
全局块从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配
置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数, 进程 PID 存放路径、日志存放路径和类型以
及配置文件的引入等。
worker_processes auto;
这是 Nginx 服务器并发处理服务的关键配置, worker_processes 值越大,可以支持的并发处理量也越多,但是
会受到硬件、软件等设备的制约
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process
下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word
process 可以同时支持的最大连接数等。
events { worker_connections 1024; }
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是: http 块也可以包括 http 全局块、 server 块。
http全局块http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }server块
在/etc/nginx/conf.d/目录下的default.conf中
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了
节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、 location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称
(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓
存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
server { listen 80; listen [::]:80; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ .php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #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; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /.ht { # deny all; #} }nginx配置反向代理 简单代理
拉取tomcat镜像,映射到8080端口
[root@Dragon conf]# dk run -d -p 8080:8080 --name d_tomcat tomcat:8.0.52
我们直接在http块中添加自定义的server块即可,配置80端口的请求转发到tomcat的8080端口
server{ listen 80; charset utf-8; server_name 192.168.152.161; location / { proxy_pass http://192.168.152.161:8080; proxy_redirect default; } }
重启d_nginx镜像,再次用宿主机浏览器访问虚拟机80端口,成功访问到tomcat的welcome页面。反向代理成功!
复杂代理准备两个jar程序分别在8888端口和9999端口,配置server块让访问虚拟机的uri中带有index.html的转发到9999端口,uri中带有cartoonIndex.html的转发到8888端口。
server{ listen 80; charset utf-8; server_name 192.168.152.161; location ~/cartoonIndex.html { proxy_pass http://192.168.152.161:8888; } location ~/index.html { proxy_pass http://192.168.152.161:9999; proxy_redirect default; }
这里只是一个简单的例子,这个只转发了两个页面,其余的东西没有转发。正常情况下应该配置路径
。
将同一个请求平均分到两个服务器上
配置负载均衡时要把默认配置include /etc/nginx/conf.d/*.conf;删除
upstream myserver { server 192.168.152.161:8888; server 192.168.152.161:9999; } server{ listen 80; charset utf-8; server_name 192.168.152.161; location / { proxy_pass http://myserver; } }
默认负载均衡的策略时轮询
轮询每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
weight指定轮询几率, weight 和访问比率成正比,用于后端服务器性能不均的情况。
upstream myserver { server 192.168.152.161:8888 weight=10; server 192.168.152.161:9999 weight=15; }ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream myserver { ip_hash; server 192.168.152.161:8888; server 192.168.152.161:9999; }fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{ server 192.168.152.161:8888; server 192.168.152.161:9999; fair; }nginx配置动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和
静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx
处理静态页面, Tomcat 处理动态页面。
动静分离从目前实现角度来讲大致分为两种
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使
浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资
源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,
不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送
一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码
304,如果有修改,则直接从服务器重新下载,返回状态码 200。
server{ listen 80; charset utf-8; server_name 192.168.152.161; location /www/ { root /data; index index.html index.htm; autoindex on; } location /image/ { root /data/; autoindex on; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)