技术胖教你从零开始搭建Nginx Web服务器
技术胖教你从零开始搭建Nginx Web服务器
Nginx(发音为“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。由于其高效、稳定和低资源消耗的特点,Nginx被广泛用于高流量的网站和应用程序中。
一、Nginx简介
Nginx是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年,如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名,适用于静态和动态内容的服务,以及负载均衡和反向代理等多种应用场景。
二、为什么选择Nginx?
Nginx之所以备受青睐,有以下几个显著的优势:
- 高性能:Nginx的事件驱动架构使其在处理大量并发连接时表现出色。
- 低资源消耗:相较于传统服务器软件,Nginx的内存消耗较低,能够高效利用系统资源。
- 可扩展性:Nginx支持模块化架构,可以通过添加模块来扩展其功能,满足各种需求。
- 负载均衡:Nginx作为负载均衡器,能够平衡多个服务器之间的流量,提高系统的可用性和稳定性。
- 反向代理:Nginx可以作为反向代理服务器,将请求转发到后端服务器,隐藏真实服务器的细节,提高安全性。
三、安装Nginx
Ubuntu系统安装
在开始安装Nginx之前,确保您已经完成了一些必要的准备工作。这包括更新系统软件包列表和安装所需的依赖项。
在终端中执行以下命令,以确保您的系统软件包列表是最新的:
sudo apt update
升级系统以应用最新的安全更新和功能改进:
sudo apt upgrade
在安装Nginx之前,您可能需要安装一些依赖项,以确保Nginx能够正常运行。一般来说,这些依赖项已经在Ubuntu系统中安装,但为了确保完整性,您可以运行以下命令:
sudo apt install -y curl gnupg2 ca-certificates lsb-release
通过这些步骤,您的系统将会是最新的,并且具备了安装Nginx所需的基本条件。
执行以下命令以安装Nginx:
sudo apt install -y nginx
这会下载并安装Nginx及其相关组件。
-y选项表示在安装过程中不询问任何确认,直接进行安装。
安装完成后,可以使用以下命令启动Nginx服务:
sudo systemctl start nginx
确保Nginx在系统启动时自动启动,可以执行以下命令:
sudo systemctl enable nginx
现在,Nginx已成功安装并正在运行。您可以通过在浏览器中输入服务器的IP地址或域名来验证Nginx是否正常工作。如果一切正常,您将看到Nginx的欢迎页面。
CentOS系统安装
在CentOS上安装Nginx,通常可以通过两种方式:使用YUM包管理器安装(适用于官方仓库或EPEL仓库中包含的Nginx版本),或者从源代码编译安装(适用于需要特定版本或自定义Nginx的情况)。以下是两种安装方法的详细步骤:
使用YUM包管理器安装Nginx
这种方法相对简单快捷,适合大多数用户。以下是安装步骤:
- 安装EPEL仓库(如果Nginx不在默认的CentOS仓库中):
sudo yum install epel-release
- 安装Nginx:
sudo yum install nginx
- 启动Nginx服务:
sudo systemctl start nginx
- 检查Nginx服务状态:
sudo systemctl status nginx
- 设置Nginx开机自启:
sudo systemctl enable nginx
- 配置防火墙(如果服务器启用了防火墙):
- 对于firewalld:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload
- 对于iptables,请根据实际情况配置规则以允许TCP 80端口。
- 访问Nginx:
使用浏览器访问服务器的IP地址或域名(默认监听80端口),应该能看到Nginx的欢迎页面。
四、Nginx配置详解
Nginx的配置文件位于/etc/nginx目录下,其中最主要的配置文件是nginx.conf。我们将学习如何修改默认网站配置并添加新的虚拟主机。
打开/etc/nginx/nginx.conf文件,了解Nginx的主要配置结构。Nginx的配置文件采用块结构,主要分为events、http和servers等块。在http块中,会包含全局的HTTP配置,而servers块包含了虚拟主机的配置。
user www-data;
worker_processes auto;
...
http {
...
server {
listen 80;
server_name example.com;
...
}
...
}
默认情况下,Nginx配置文件中包含一个默认的虚拟主机配置,监听80端口。您可以通过修改此配置来更改默认网站的行为。打开/etc/nginx/sites-available/default文件:
sudo nano /etc/nginx/sites-available/default
您可以修改配置中的内容,如更改根目录、添加或修改server_name等选项。保存并退出后,重新加载Nginx以应用更改:
sudo systemctl reload nginx
要添加新的虚拟主机,首先在/etc/nginx/sites-available/目录下创建一个新的配置文件。例如,创建一个名为mywebsite的配置文件:
sudo nano /etc/nginx/sites-available/mywebsite
在新文件中添加虚拟主机配置:
server {
listen 80;
server_name mywebsite.com;
root /var/www/mywebsite;
index index.html;
}
保存并退出编辑器。然后,创建一个符号链接到sites-enabled目录,以启用新配置:
sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/
最后,重新加载Nginx以应用新配置:
sudo systemctl reload nginx
五、实战案例
反向代理和负载均衡配置
假设我们有多个Tomcat服务器,需要通过Nginx进行反向代理和负载均衡。以下是具体的配置示例:
http {
...
upstream tomcat_server {
server 192.168.80.100:8080 weight=1;
server 192.168.80.101:8080 weight=1;
server 192.168.80.101:8081 weight=1;
}
server {
listen 80;
server_name www.kgc.com;
charset utf-8;
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
}
}
静态资源和动态请求分离
在实际应用中,我们通常需要将静态资源和动态请求分开处理。以下是一个示例配置:
server {
listen 80;
server_name example.com;
location /static/ {
alias /var/www/static/;
expires 30d;
}
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
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;
}
}
六、常见问题及解决方案
- 启动Nginx
cd /usr/local/nginx/sbin
./nginx
- 停止Nginx
cd /usr/local/nginx/sbin
./nginx -s stop
也可使用kill停止进程:
kill -9 nginx进程ID
- 重启Nginx
cd /usr/local/nginx/sbin
./nginx -s reload
- 设置重定向
需要修改的文件是nginx.conf【一通常情况下在/usr/local/nginx/conf/nginx.conf】,在server中添加代码location为重定向后的路径,{}中为原地址:
server {
listen 8080;
server_name localhost;
location /aaa/bbb/ {
alias /ccc/ddd/eee/fff/;
}
#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 html;
}
}
注:修改conf文件保存后要重启nginx!
- 设置请求大小【文件上传大小】
上传文件大小相关的有三个配置
* client_body_buffer_size 配置请求体缓存区大小, 不配的话,
* client_body_temp_path 设置临时文件存放路径。只有当上传的请求体超出缓存区大小时,才会写到临时文件中
* client_max_body_size 设置上传文件的最大值
通常情况修改 client_max_body_size 就可以解决请求413的问题
server {
listen 7980;
server_name localhost;
client_max_body_size 500M; *需要多大就把阈值改为多大
}
注:修改conf文件保存后要重启nginx!
通过以上内容,您应该能够从零开始搭建和配置Nginx Web服务器。Nginx的配置文件结构清晰,指令丰富,能够满足各种复杂的Web服务器需求。通过合理配置,可以充分发挥Nginx的高性能和高并发处理能力。