Nginx服务器配置
一、Nginx 简介
Nginx 是一款高性能的 HTTP 和反向代理服务器,其核心优势在于:
- 采用高效的网络 I/O 模型(epoll、kqueue、eventport 等)
- 支持高达 5 万个并发连接
- 系统资源(内存、CPU)消耗低
- 运行稳定,适合作为生产环境的 web 服务器
二、Nginx 安装与基础配置
1. 安装与启动
# 使用 yum 包管理器安装 nginx
[root@server ~ 14:30:54]# yum -y install nginx
# 设置 nginx 开机自启并立即启动
# enable: 开机自启;--now: 立即启动
[root@server ~ 14:30:54]# systemctl enable nginx.service --now
2. 配置主页与测试
# 备份默认主页
[root@server ~ 23:19:05]# mv /usr/share/nginx/html/index.html{,.ori}
# 创建自定义主页内容
[root@server ~ 23:19:42]# echo nihao > /usr/share/nginx/html/index.html
3. 防火墙配置
# 永久开放 http 服务(80端口)
[root@server ~ 14:33:53]# firewall-cmd --add-service=http --permanent
# 重新加载防火墙规则使配置生效
[root@server ~ 14:33:53]# firewall-cmd --reload
4. 测试配置
# 测试访问
[root@server ~ 23:20:13]# curl http://www.server.cloud
curl: (6) Could not resolve host: www.server.cloud; 未知的错误
[root@server ~ 23:21:00]# vim /etc/hosts
# windows客户端修改C:\Windows\System32\drivers\etc\hosts
# Linux或Unix修改 /etc/hosts
# 添加如下记录
10.1.8.10 www.server.cloud #ip为实际ip
三、虚拟主机配置
虚拟主机允许在同一台服务器上部署多个网站,主要有两种实现方式:
1. 基于域名的虚拟主机
# 创建虚拟主机配置文件,从nginx.conf中抄格式
[root@server ~ 23:23:37]# vim /etc/nginx/nginx.conf
[root@server ~ 23:24:05]# vim /etc/nginx/conf.d/vhost-name.conf
配置内容:
#第一个虚拟主机
server {
server_name www1.server.cloud; # 绑定的域名
root /usr/share/nginx/web1; # 网站根目录
}
#第二个虚拟主机
server {
server_name www2.server.cloud; # 绑定的域名
root /usr/share/nginx/web2; # 网站根目录
}
测试与验证
#先创建root中所填目录
[root@server ~ 23:31:06]# mkdir /usr/share/nginx/web1
[root@server ~ 23:31:13]# mkdir /usr/share/nginx/web2
#写入网站内容
[root@server ~ 23:31:30]# echo abc > /usr/share/nginx/web1/index.html
[root@server ~ 23:31:42]# echo ooo > /usr/share/nginx/web2/index.html
#修改主机配置
[root@server ~ 23:32:37]# vim /etc/hosts
10.1.8.10 web1.server.cloud
10.1.8.10 web2.server.cloud
#重启服务并测试web页面
[root@server ~ 23:53:04]# systemctl restart nginx.service
[root@server ~ 23:33:41]# curl http://web1.server.cloud
abc
[root@server ~ 23:33:46]# curl http://web2.server.cloud
ooo
2. 基于端口的虚拟主机
# 创建端口虚拟主机配置文件
#继续从nginx.conf里面粘贴,这次要把端口也粘贴出来
[root@server ~ 15:58:28]# vim /etc/nginx/conf.d/vhost-port.conf
配置内容:
# 监听 8081 端口的虚拟主机
server {
listen 8081; # 监听端口
server_name server.cloud; # 绑定域名
root /usr/share/nginx/8081; # 网站根目录
}
# 监听 8082 端口的虚拟主机
server {
listen 8082; # 监听端口
server_name server.cloud; # 绑定域名
root /usr/share/nginx/8082; # 网站根目录
}
测试与验证
#创建目录
[root@server ~ 23:45:29]# mkdir /usr/share/nginx/8081
[root@server ~ 23:46:01]# mkdir /usr/share/nginx/8082
[root@server ~ 23:46:03]# echo qwer > /usr/share/nginx/8082/index.html
[root@server ~ 23:46:34]# echo cpdd > /usr/share/nginx/8081/index.html
#重启服务!并测试
[root@server ~ 23:53:04]# systemctl restart nginx.service
[root@server ~ 23:53:41]# curl http://server.cloud:8081
cpdd
[root@server ~ 23:53:44]# curl http://server.cloud:8082
qwer
四、SSL/TLS 配置(HTTPS)
1. 生成 SSL 证书
# 1. 生成 2048 位的私钥文件
[root@server ~ 23:53:48]# openssl genrsa -out www.key 2048
# 2. 生成证书请求文件(CSR)
# -subj 参数指定证书信息:国家/省份/城市/组织/部门/域名/邮箱
[root@server ~ 23:58:24]# openssl req -new -key www.key -o
ut www.csr -subj "/C=CN/ST=JS/L=NJ/O=LM/OU=DEVOPS/CN=www.server.cloud/emailAddress=server@server.cloud"
# 注意:CN 的值必须与网站域名一致
# 3. 使用私钥对请求文件签名,生成自签名证书(有效期 3650 天)
[root@server ~ 23:59:00]# openssl x509 -req -days 3650 -in www.csr -signkey www.key -out www.crt
2. 配置 HTTPS 站点
# 创建证书存放目录
[root@server ~ 23:59:14]# mkdir /etc/ssl/certs/www.server.cloud
# 移动证书文件到指定目录
[root@server ~ 00:00:56]# ls
anaconda-ks.cfg www.crt www.csr www.key
[root@server ~ 00:01:26]# mv www* /etc/ssl/certs/www.server.cloud
# 编辑 HTTPS 配置文件
#一定要把ssl.conf文件创建在/etc/nginx/conf.d/下,不然无法识别
[root@server ~ 00:26:24]# vim /etc/nginx/conf.d/ssl.conf
配置内容:
server {
# 监听 443 端口(HTTPS 默认端口),启用 SSL 和 HTTP/2
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name www.server.cloud; # 绑定域名
root /usr/share/nginx/html; # 网站根目录
# 配置证书路径
ssl_certificate "/etc/ssl/certs/www.server.cloud/www.crt"; # 公钥证书
ssl_certificate_key "/etc/ssl/certs/www.server.cloud/www.key"; # 私钥
}
3. 配置 HTTP 重定向到 HTTPS
# 编辑 nginx 主配置文件
[root@server ~ 00:28:08]# vim /etc/nginx/nginx.conf
添加重定向配置:
server {
listen 80 default_server; # 监听 80 端口(HTTP)
listen [::]:80 default_server;
server_name www.server.cloud;
root /usr/share/nginx/html;
# 301 永久重定向到 HTTPS
# $host: 域名;$request_uri: 请求路径
return 301 https://$host$request_uri;
}
4. 重启服务与防火墙配置
# 重启 nginx 使配置生效
[root@server ~ 00:29:59]# systemctl restart nginx.service
# 开放 HTTPS 服务(443 端口)
[root@www ~]# firewall-cmd --add-service=https --permanent
[root@www ~]# firewall-cmd --reload
# 测试重定向(会自动跳转到 HTTPS)
[root@server ~ 00:30:18]# curl http://www.server.cloud/
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
# 测试 HTTPS 访问(-k 忽略证书验证,自签名证书需要此参数)
[root@server ~ 00:30:38]# curl -k https://www.server.cloud/
mmm
五、支持动态脚本
配置 PHP 支持
# 安装 PHP 及相关组件
[root@server ~ 11:37:36]# yum install -y php php-fpm
[root@server ~ 11:37:36]# yum install -y php-gd php-common php-pear php-mbstring php-mcrypt
# 查看 PHP 版本
[root@server ~ 11:37:53]# php -v
# 简单测试 PHP 是否正常工作
[root@server ~ 11:38:01]# echo "<?php echo 'PHP Test Page'.\"\n\"; ?>" > php_test.php
[root@server ~ 11:38:19]# php php_test.php
PHP Test Page
# 创建 PHP 信息测试页
[root@server ~ 11:38:28]# echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
配置 Nginx 解析 PHP:
# 编辑 nginx 主配置文件
[root@server ~ 11:39:14]# vim /etc/nginx/nginx.conf
在http块中,server块外添加:types{},随即把include /etc/nginx/mime.types;移入
types {
# 这行必须放在 types 块内部,引入 mime.types 的内>容
include /etc/nginx/mime.types;
# (可选)若有额外的MIME类型,可在这里补充,如:
# application/x-httpd-php php;
# application/x-httpd-php-source phps;
default_type application/octet-stream;
}
在 server 块中添加:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
测试 PHP 解析:
[root@server ~ 17:05:18]# curl http://www.server.cloud/info.php
反向代理
客户端访问代理服务器,代理服务器会将客户端请求发送给真实服务器。
反向代理实现了隐藏内部服务器。
角色说明
-
代理服务器 proxy 10.1.8.20
-
真实服务器 server 10.1.8.10
代理服务器配置
# 配置解析
[root@proxy ~ 00:33:19]# echo '10.1.8.10 www.server.cloud' >> /etc/hosts
# 安装 nginx
[root@proxy ~ 00:33:40]# yum -y install nginx
# 启动 nginx
[root@proxy ~ 00:34:05]# systemctl enable --now nginx
# 防火墙
[root@proxy ~]# firewall-cmd --add-service=http --permanent
[root@proxy ~]# firewall-cmd --reload
# 配置代理,server部分更改如下
[root@proxy ~ 00:34:13]# vim /etc/nginx/nginx.conf
# change [server] section like follows
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
#添加如下内容
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
......
#新增 location 规则
location /proxy/ {
proxy_pass http://www.server.cloud/;
}
}
[root@proxy ~]# systemctl restart nginx
# If SELnux is enabled, change boolean setting.
[root@proxy ~]# setsebool -P httpd_can_network_connect on
真实服务器配置
# 安装nginx
[root@proxy ~ 16:17:52]# yum -y install nginx
# 启动nginx
[root@proxy ~ 16:18:32]# systemctl enable --now nginx
# 防火墙
[root@www ~]# firewall-cmd --add-service=http --permanent
[root@www ~]# firewall-cmd --reload
# 准备测试页
[root@server ~ 00:41:55]# echo hello laoma > /usr/share/nginx/html/proxy/test.html
# 测试效果
[root@server ~ 00:44:58]# curl http://www.server.cloud/proxy/test.html
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
#配置的重定向还在所以用https访问
[root@server ~ 00:45:42]# curl -k https://www.server.cloud/proxy/test.html
hello laoma
5407

被折叠的 条评论
为什么被折叠?



