Appearance
基于端口的虚拟主机
基于端口的虚拟主机通过不同的端口访问不同的网站,适用于测试环境或需要通过端口区分服务的场景。
基本配置
配置示例
nginx
# 端口80
server {
listen 80;
server_name localhost;
root /var/www/site1;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# 端口8080
server {
listen 8080;
server_name localhost;
root /var/www/site2;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# 端口8081
server {
listen 8081;
server_name localhost;
root /var/www/site3;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}访问方式
完整配置示例
多端口配置
nginx
# 站点1 - 端口80
server {
listen 80;
server_name localhost;
root /var/www/site1;
index index.html index.htm;
access_log /var/log/nginx/site1.access.log;
error_log /var/log/nginx/site1.error.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 站点2 - 端口8080
server {
listen 8080;
server_name localhost;
root /var/www/site2;
index index.html index.htm;
access_log /var/log/nginx/site2.access.log;
error_log /var/log/nginx/site2.error.log;
location / {
try_files $uri $uri/ =404;
}
}
# 站点3 - 端口8081
server {
listen 8081;
server_name localhost;
root /var/www/site3;
index index.html index.htm;
access_log /var/log/nginx/site3.access.log;
error_log /var/log/nginx/site3.error.log;
location / {
try_files $uri $uri/ =404;
}
}监听多个端口
单个server监听多个端口
nginx
server {
listen 80;
listen 8080;
server_name localhost;
root /var/www/site1;
index index.html index.htm;
}使用default_server
nginx
server {
listen 80 default_server;
server_name localhost;
root /var/www/default;
index index.html index.htm;
}端口与域名结合
域名+端口配置
nginx
# example.com:80
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html index.htm;
}
# example.com:8080
server {
listen 8080;
server_name example.com;
root /var/www/example.com-admin;
index index.html index.htm;
}
# test.com:80
server {
listen 80;
server_name test.com;
root /var/www/test.com;
index index.html index.htm;
}
# test.com:8080
server {
listen 8080;
server_name test.com;
root /var/www/test.com-admin;
index index.html index.htm;
}SSL端口配置
HTTPS端口443
nginx
# HTTP
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html index.htm;
}
# HTTPS
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
root /var/www/example.com;
index index.html index.htm;
}自定义HTTPS端口
nginx
server {
listen 8443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
root /var/www/example.com;
index index.html index.htm;
}防火墙配置
开放端口
Ubuntu (UFW)
bash
# 开放80端口
sudo ufw allow 80/tcp
# 开放8080端口
sudo ufw allow 8080/tcp
# 开放8081端口
sudo ufw allow 8081/tcp
# 开放443端口
sudo ufw allow 443/tcpCentOS (firewalld)
bash
# 开放80端口
sudo firewall-cmd --permanent --add-port=80/tcp
# 开放8080端口
sudo firewall-cmd --permanent --add-port=8080/tcp
# 开放8081端口
sudo firewall-cmd --permanent --add-port=8081/tcp
# 开放443端口
sudo firewall-cmd --permanent --add-port=443/tcp
# 重载防火墙
sudo firewall-cmd --reload检查端口监听
bash
# 查看端口监听
netstat -tlnp | grep nginx
# 或使用ss命令
ss -tlnp | grep nginx常见应用场景
开发环境
nginx
# 开发环境
server {
listen 8000;
server_name localhost;
root /var/www/dev;
index index.html index.htm;
}
# 测试环境
server {
listen 8001;
server_name localhost;
root /var/www/test;
index index.html index.htm;
}
# 生产环境
server {
listen 80;
server_name example.com;
root /var/www/prod;
index index.html index.htm;
}管理后台
nginx
# 前台
server {
listen 80;
server_name example.com;
root /var/www/frontend;
index index.html index.htm;
}
# 后台
server {
listen 8080;
server_name example.com;
root /var/www/backend;
index index.html index.htm;
# IP限制
allow 192.168.1.0/24;
deny all;
}API服务
nginx
# Web站点
server {
listen 80;
server_name example.com;
root /var/www/web;
index index.html index.htm;
}
# API服务
server {
listen 8080;
server_name api.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}端口跳转
HTTP跳转HTTPS
nginx
server {
listen 80;
server_name example.com;
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
root /var/www/example.com;
index index.html index.htm;
}端口跳转
nginx
server {
listen 80;
server_name example.com;
return 301 http://$server_name:8080$request_uri;
}
server {
listen 8080;
server_name example.com;
root /var/www/example.com;
index index.html index.htm;
}配置文件组织
独立配置文件
/etc/nginx/
├── nginx.conf
└── conf.d/
├── site1.conf
├── site2.conf
└── site3.confsite1.conf
nginx
server {
listen 80;
server_name localhost;
root /var/www/site1;
index index.html index.htm;
}site2.conf
nginx
server {
listen 8080;
server_name localhost;
root /var/www/site2;
index index.html index.htm;
}site3.conf
nginx
server {
listen 8081;
server_name localhost;
root /var/www/site3;
index index.html index.htm;
}测试配置
测试配置文件
bash
nginx -t重载配置
bash
nginx -s reload测试端口访问
bash
# 测试80端口
curl http://localhost:80
# 测试8080端口
curl http://localhost:8080
# 测试8081端口
curl http://localhost:8081常见问题
端口无法访问
检查项:
- Nginx配置是否正确
- 防火墙是否开放端口
- 端口是否被其他程序占用
- SELinux是否阻止访问
端口被占用
查看占用端口的进程:
bash
netstat -tlnp | grep :8080停止占用端口的进程:
bash
kill -9 <PID>或修改Nginx监听端口:
nginx
listen 8081;总结
基于端口的虚拟主机配置要点:
- listen指令:指定监听端口
- 防火墙配置:开放相应端口
- 端口检查:确保端口未被占用
- 访问方式:通过
http://域名:端口访问 - 应用场景:适合开发环境、管理后台等
基于端口的虚拟主机配置简单,适合测试环境和特殊场景使用。