在部署我自己编写的Django项目时, 由于我在windows下编写代码时启动端口都为8000, 但是在部署项目时, 需要让外界使用80端口直接访问, 因此总结出以下三种方法实现
由于我的项目使用了websocket对于访问的端口十分敏感, 实际部署中使用的是iptables
端口转发
Nginx 是一种流行的高性能 Web 服务器和反向代理服务器,可以将请求从一个端口转发到另一个端口。它不仅支持简单的端口转发,还提供了丰富的功能,如 WebSocket 支持、负载均衡、SSL/TLS 加密等。
步骤:
安装 Nginx:
sudo yum install nginx
sudo apt-get install nginx
配置 Nginx:
创建或编辑配置文件 /etc/nginx/conf.d/your_app.conf
,添加以下内容:
nginxserver { listen 80; server_name 156.238.236.88; location / { proxy_pass http://127.0.0.1:8000; 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:
bashsudo systemctl start nginx # 启动 Nginx
sudo systemctl reload nginx # 重新加载配置
优点:
缺点:
Apache HTTP Server 也是一种强大的 Web 服务器,可以通过 mod_proxy
模块进行端口转发。
步骤:
安装 Apache:
sudo yum install httpd
sudo apt-get install apache2
启用必要的模块:
bashsudo a2enmod proxy sudo a2enmod proxy_http
配置 Apache:
编辑配置文件 /etc/httpd/conf/httpd.conf
(CentOS)或 /etc/apache2/sites-available/000-default.conf
(Ubuntu),添加以下内容:
apache<VirtualHost *:80> ServerName 156.238.236.88 ProxyPreserveHost On ProxyPass / http://127.0.0.1:8000/ ProxyPassReverse / http://127.0.0.1:8000/ </VirtualHost>
启动或重新加载 Apache:
bashsudo systemctl start httpd # CentOS
sudo systemctl start apache2 # Ubuntu
sudo systemctl reload httpd # CentOS
sudo systemctl reload apache2 # Ubuntu
优点:
缺点:
iptables
进行端口转发iptables
是 Linux 系统中的一个强大的工具,可以进行简单的端口转发。它适用于基本的流量转发,但对于 WebSocket 和更复杂的场景支持有限。
步骤:
配置端口转发:
bashsudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
保存配置(CentOS):
bashsudo service iptables save
Ubuntu 安装 iptables-persistent
保存配置:
bashsudo apt-get install iptables-persistent
优点:
缺点:
iptables
适用于基本的端口转发需求,但在处理 WebSocket 和高级功能时存在局限性。选择适合的方法取决于你的具体需求和环境。对于需要更多功能和灵活性的场景,推荐使用 Nginx 或 Apache 作为反向代理;对于简单的端口转发,iptables
是一个简单而有效的选择。
本文作者:GYC
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!