Nginx正向代理可以用于将内部网络中的域名请求转发到外部网络,同时保持内部网络的隔离性。以下是实现内网域名转发的详细步骤:
首先确保你已经安装了Nginx,然后编辑nginx.conf文件:
http {
# 定义DNS解析器(使用Google的公共DNS)
resolver 8.8.8.8;
server {
listen 80;
# 配置正向代理
location / {
# 允许的客户端IP(根据需要修改)
allow 192.168.1.0/24;
deny all;
# 设置代理
proxy_pass http://$http_host$request_uri;
# 设置必要的头部
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 其他代理设置
proxy_connect_timeout 30;
proxy_read_timeout 60;
proxy_send_timeout 60;
}
}
}
如果你需要将特定的内网域名转发到特定的外部地址:
server {
listen 80;
server_name internal.example.com;
location / {
proxy_pass http://external.example.com;
proxy_set_header Host external.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
如果需要支持HTTPS转发:
server {
listen 443;
server_name internal.example.com;
ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass https://external.example.com;
proxy_set_header Host external.example.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# HTTPS特定设置
proxy_ssl_server_name on;
proxy_ssl_session_reuse off;
}
}
客户端需要配置使用这个Nginx服务器作为代理:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
# ...
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
# ...其他代理设置
}
}
location / {
# 基于IP的限制
allow 192.168.1.0/24;
deny all;
# 基于时间的限制
if ($time_local ~ "^(Mon|Tue|Wed|Thu|Fri)") {
set $allow_time Y;
}
if ($allow_time != Y) {
return 403;
}
# ...其他代理设置
}
安全性:
性能:
worker_processes
和worker_connections
以适应你的负载日志:
access_log /var/log/nginx/proxy_access.log;
error_log /var/log/nginx/proxy_error.log;
DNS缓存:
resolver_timeout
和resolver_valid
调整完成配置后,使用nginx -t
测试配置,然后systemctl reload nginx
重新加载配置。