一文带你了解nginx基础 (2)

最后启动服务并重启机器进行测试

systemctl enable nginx.service # 启用 nginx.service 开机启动 reboot # 重启电脑 ## 其他命令 systemctl disable nginx.service # 禁止 nginx.service 开机启动 systemctl stop nginx.service # 停止 nginx.service systemctl start nginx.service  # 启动 nginx.service systemctl restart nginx.service # 重启 nginx.service systemctl list-units --type=service # 查看所有已启动的服务

检查 nginx.service 运行状况

systemctl status nginx.service

检查nginx运行状况

netstat -anput | grep nginx 二、Docker中安装nginx 下载镜像 # 搜索镜像 docker search nginx # 拉取镜像 docker pull nginx 创建并启动容器

-d:后台运行

docker run -d -it -p 8080:80 --name nginx8080 nginx 访问nginx curl <ip>:8080 微服务分布式部署前期准备

为了方便修改nginx配置,需要将容器内的nginx相关文件拷贝到主机中,并将其映射到容器中去,这样,修改起来就方便多了

拷贝nginx文件到本地

docker cp nginx8080:/etc/nginx ~/nginx

上面步骤创建的nginx8080已经没用了,删除即可

docker stop nginx8080 docker rm nginx8080 创建挂载本地目录的nginx8080容器

挂载:即主机上指定目录与容器内指定目录文件共享

-v ~/nginx:/etc/nginx:将本地~/nginx文件映射到容器/etc/nginx,方便修改配置

-v ~/nginx/log:/var/log/nginx:将本地~/nginx/log映射到容器/var/log/nginx,方便查看日志

我的环境:apidemo1、apidemo1、nginx8080都在同一docker中

方法一:使用 link 建立容器间通信

--link=apidemo1:demo1:实现nginx8080容器到apidemo1容器的单向通信,并为apidemo1起别名为demo1,nginx8080内部可直接使用demo1访问apidemo1

--link=apidemo2:demo2:实现nginx8080容器到apidemo2容器的单向通信,并为apidemo2起别名为demo2,nginx8080内部可直接使用demo2访问apidemo2

# apidemo1与apidemo2是同一应用的不同分发 docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginx/log:/var/log/nginx --link=apidemo1:demo1 --link=apidemo2:demo2 nginx

修改nginx.conf

vim ~/nginx/nginx.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location /api/ { proxy_pass ; } } upstream apiserver { server demo1 weight=1; server demo2 weight=1; }

方法二:使用 docker bridge 建立容器间通信

docker network ls:查看docker网络信息,其中,我们创建的容器默认使用bridge(桥接)

docker network inspect bridge:查看bridge的详细信息以及哪些容器使用了该网络类型,我这边的ip地址是

apidemo1:172.17.0.2

apidemo2:172.17.0.3

docker run -d -it -p 8080:80 --name nginx8080 -v ~/nginx:/etc/nginx -v ~/nginx/log:/var/log/nginx nginx

修改nginx.conf

vim ~/nginx/nginx.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location /api/ { proxy_pass ; } } upstream apiserver { server 172.17.0.2 weight=1; server 172.17.0.3 weight=1; }

为了应用新nginx.conf,重启nginx8080 docker restart nginx8080 测试 // 这里的路径按照自己的来 curl <ip>:8080/api/values 可能出现的问题

Http staus code——502:
解决:查看日志可以看到“113: No route to Host”,尝试关闭docker所在linux机器的防火墙,发现可以访问了,可以确定是防火墙的问题。但是把防火墙关闭太不安全了,所以我们选择打开防火墙,然后执行以下命令

# 信任 docker0 服务连接 nmcli connection modify docker0 connection.zone trusted # 停止 NetworkManager 服务(该服务用语监测网络、自动连接网络) systemctl stop NetworkManager.service # 将docker0网络接口设置为内部区域(永久) firewall-cmd --permanent --zone=trusted --change-interface=docker0 # 启动 NetworkManager 服务 systemctl start NetworkManager.service # 信任 docker0 服务连接 nmcli connection modify docker0 connection.zone trusted # 重启 docker systemctl restart docker.service 三、文件目录

*_temp:共5个temp结尾的目录,用于存放nginx运行时产生的临时文件

conf:存放配置文件的目录,包含主配置文件nginx.conf

html:存放了nginx的错误页面和欢迎页面

logs:存放了访问日志和错误日志

sbin:存放了nginx的二进制命令,常用于nginx服务的启动、停止等管理工作

nginx常用功能和配置 一、限流 三种方式

limit_conn_zone(限制连接数,针对客户端,即单一ip限流)

limit_req_zone(限制请求数,针对客户端,即单一ip限流)

ngx_http_unpstream_module(推荐,针对后台,如:有两台服务器,服务器A最大可并发处理10W条请求,服务器B最大可并发处理5W条请求,这样当12W请求按照负载均衡规则应当被分配给服务器A时,nginx为了防止A挂掉,所以将另外的2W分配给B)

压力测试工具——Ab

安装

yum install httpd-tools -y

测试

// 10个用户,向 并发发送1000条请求(总请求数=1000) ab -c 10 -n 1000

返回值

Document Path:测试的页面路径

Document Length:页面大小(byte)

Concurrency Level:并发数量,即并发用户数

Time taken for tests:测试耗费时长

Complete requests:成功的请求数量

Failed requests:请求失败的数量

Write errors:错误数量

Requests per second:每秒钟的请求数量、吞吐率

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjsd.html