学习如何部署配置nginx
学习如何部署配置nginx
一、 Nginx是做什么的?
Nginx 是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP/UDP代理服务器。
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
在项目使用中,使用最多的三个核心功能是静态服务器、反向代理和负载均衡。
二、 Nginx的常用命令
启动
直接使用nginx启动
使用systemctl start nginx.service启动
查看
使用ps aux | grep nginx查询
使用systemctl status nginx.service查看
停止
立即停止服务, nginx -s stop
从容停止服务 nginx -s quit
杀死进程 killall nginx
重启
- systemctl restart nginx.service
更新
- nginx -s reload
查看端口占用
- netstat -tlnp
使用帮助:nginx -h
三、 Nginx基本配置文件详解
1. 查看nginx的安装目录
rpm -ql nginx
rpm是linux的rpm包管理工具
-q 代表询问模式
-l 代表返回列表
2. nginx.conf配置详解
进入/etc/nginx.使用vim打开nginx.conf
1 | cd /etc/nginx |
3. nginx.conf的内容:
在项目使用中,使用最多的三个核心功能是静态服务器、反向代理和负载均衡。
这三个不同的功能的使用,都跟Nginx的配置密切相关,Nginx服务器的配置信息主要集中在”nginx.conf”这个配置文件中,并且所有的可配置选项大致分为以下几个部分.
1 | #运行用户,默认即是nginx,可以不进行设置 |
4. 配置文件组成
- 全局块(main模块)
从配置文件到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户、允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等.
- user 用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行
- worker_processes 指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几M~几十M不等)根据实际情况进行调整,通常数量是CPU内核数量的整数倍
- error_log 定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】
- pid 用来指定进程id的存储文件的位置
- worker_rlimit_nofile 用于指定一个进程可以打开最多文件数量的描述
- …
- events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接
- worker_connections 指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的。
- multi_accept 配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接
- use epoll 配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue
- …
- http {}配置
Nginx服务器培配置中最频繁的部分、代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都在这里
http全局块:
http全局快配置的指令包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单链接请求书上限等
1 | http { |
server块:
每个server块也分为全局server块,以及可以同时包含多个location块
(1)全局server{}块
最常见的配置是本虚拟主机的监听配置和本虚拟机的名称或IP配置
(2)location{} 块
一个server可以配置多个location块
1 | server { |
这块的主要作用是基于Nginx服务器接收到的请求字符串(例如:server_name/uri-string),对虚拟主机名称之外的字符串进行(例如 前面的uri-string)进匹配,对特定的请求进行处理,地址指向,数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
四、 使用域名配置虚拟主机
- 配置基于不同端口的监听服务
1 | server{ |
- 基于域名的监听服务配置
1
2
3
4
5
6
7
8server{
listen 80;
server_name nginx2.jspang.com;
location / {
root /usr/share/nginx/html/html8001;
index index.html index.htm;
}
}
练习Docker安装并配置nginx
1. 安装Nginx镜像
在阿里云服务器执行以下docker命令:1
docker pull nginx
检查镜像是否安装成功
1 | docker images |
可以看到已经有latest版本的nginx镜像了
2. 创建Nginx配置文件
启动前需要先创建Nginx外部挂载的配置文件( /home/nginx/conf/nginx.conf)
之所以要先创建 , 是因为Nginx本身容器只存在/etc/nginx 目录 , 本身就不创建 nginx.conf 文件
当服务器和容器都不存在 nginx.conf 文件时, 执行启动命令的时候 docker会将nginx.conf 作为目录创建 , 这并不是我们想要的结果 。
1 | # 创建挂载目录 |
容器中的nginx.conf文件和conf.d文件夹复制到宿主机
1 | # 生成容器 |
4. 创建Nginx容器并运行
Docker 创建Nginx容器
1 | # 直接执行docker rm nginx或者以容器id方式关闭容器 |
1 | docker run \ |
命令 | 描述 |
---|---|
–name nginx | 启动容器的名字 |
-d | 后台运行 |
-p 9002:80 | 将容器的 9002(后面那个) 端口映射到主机的 80(前面那个) 端口 |
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf | 挂载nginx.conf配置文件 |
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d | 挂载nginx配置文件 |
-v /home/nginx/log:/var/log/nginx | 挂载nginx日志文件 |
-v /home/nginx/html:/usr/share/nginx/html | 挂载nginx内容 |
nginx:latest | 本地运行的版本 |
\ | shell 命令换行 |
5. 查看效果
执行命令没有报错,在 http://120.79.182.135:8080/ 查看效果
6、修改内容进行展示
修改/home/nginx/html的index.html文件
重启容器1
docker restart nginx
可以看到有中文乱码问题
再次进入html文件的 head 标签中
添加以下代码:
1 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
重启容器
1 | docker restart nginx |