Nginx-多服务绑定80端口及映射域名

多服务绑定80端口及映射域名

说明:业务需要配置的样例模板,如需深入了解,请查看官方文档

 

1.Nginx配置文件nginx.conf(可拆分多台机器部署)

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream apiServices{ 
        server 192.168.1.100:80;
        server 192.168.1.101:80;
        server 192.168.1.102:80;
    }

    server { 
        listen       80; 
        server_name  www.test.com;
        client_max_body_size 100M;
        location / {
            try_files $uri @www;
        }
        location @www{
            internal;
            proxy_pass http://127.0.0.1:6666;
            include req_proxy.conf;
        }
    }
    server {
        listen       80;
        server_name  maven.test.com;
        client_max_body_size 20M;
        location / {
            try_files $uri @maven;
        }
        location @maven {
            internal;
            proxy_pass http://192.168.1.103:8081;
            include req_proxy.conf;
        }
    }

    server {
        listen       80;
        server_name  pbs.test.com;
        client_max_body_size 20M;
        location / {
            try_files $uri @pbs;
        }
        location @pbs {
            internal;
            proxy_pass http://192.168.1.103:8888;
            include req_proxy.conf;
        }
    }

    server {# www.test.com绑定网址
        listen       6666;
        server_name  localhost;
        charset utf-8;
        server_name_in_redirect off;
        port_in_redirect off;

        gzip on;
        gzip_static on;
        gzip_min_length 10k;
        gzip_types text/javascript application/javascript text/css application/json;
        gzip_proxied any;
        gzip_vary on;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        
        root    D:/web/dist;#vue项目
        index  index.html index.htm;    #目录内的默认打开文件,如果没有匹配到index.html,则搜索index.htm,依次类推--root的详解版本
        location /{
            try_files $uri $uri//index.html;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
        }

        location = /index.html {
            add_header Cache-Control no-cache;
        }

        location ~ /static/ {
            add_header Cache-Control no-cache;
        }

        location ~ /(js/*|css/*|img/*|font/*) {
            expires 30d;
            add_header Cache-Control public;
        }

        
        location /api/{#要访问的后端服务
            proxy_pass http://apiServices;
            proxy_cookie_path '/api' '';
            #sub_filter '127.0.0.1:8181' '192.168.1.103/api/';
            #sub_filter_once off;
        }
    }

    server { #pbs.test.com绑定资源
        listen       8888;
        server_name  localhost;
        charset utf-8;
        server_name_in_redirect off;
        port_in_redirect off;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location /photos {
            root  D:/resources;
            rewrite ^/photos/(.*)$ \photos\$1 break;
        }        
        location /videos {
            root  D:/resources;
            rewrite ^/videos/(.*)$ \videos\$1 break;
        }

    }

}

2.include引入统计配置req_proxy.conf

proxy_connect_timeout 30s; 
proxy_send_timeout 120; 
proxy_read_timeout 120; 
proxy_buffer_size 32k; 
proxy_buffers 4 32k; 
proxy_busy_buffers_size 64k; 
proxy_redirect off; 
proxy_hide_header Vary; 
proxy_set_header Accept-Encoding ''; 
proxy_set_header Host $host; 
proxy_set_header Referer $http_referer; 
proxy_set_header Cookie $http_cookie; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

     

<think>嗯,用户的问题是关于在Linux中使用Docker运行Nginx容器时遇到80端口被占用的情况,需要找到解决方案。首先,我需要回忆一下Docker和Nginx的相关知识,以及常见的端口冲突处理方法。 首先,端口被占用通常是因为主机上的80端口已经被其他进程使用,比如可能是另一个Nginx实例、Apache或者其他服务。这时候,用户运行Docker容器并映射80端口时就会失败,因为主机无法绑定到已经被占用的端口。 接下来,我需要考虑如何确认80端口是否真的被占用。常用的命令有`netstat`或者`ss`,比如`sudo netstat -tuln | grep :80`或者`sudo ss -tuln | grep :80`,这样可以查看是否有进程在监听80端口。如果发现确实有进程占用了,用户需要决定是停止该进程还是更改Docker容器的映射端口。 然后,解决方案可能有几种。第一种是停止占用80端口服务,比如如果系统里有自带的Nginx在运行,可以用`systemctl stop nginx`来停止。第二种是修改Docker命令,将主机的其他端口(比如8080映射到容器的80端口,这样容器仍然使用80,但外部通过8080访问。第三种是检查是否有其他容器占用了80端口,使用`docker ps`查看,并停止或删除那个容器。另外,用户可能需要检查防火墙设置,比如SELinux或者firewalld,这些有时会导致端口无法正确映射,需要调整规则或者关闭它们。还有可能需要正确挂载配置文件,虽然这更多是关于配置错误而非端口占用,但用户提供的引用中有提到挂载配置文件的问题,可能需要一并考虑。 另外,用户提供的引用中有几个具体的命令示例,比如引用2中的`docker run --name nginx1 -p 8080:80 -d nginx`,这说明修改映射端口是一个可行的办法。引用3提到了挂载配置文件,可能需要确保挂载正确,但端口问题可能与此无关,除非配置文件中监听了其他端口,但默认Nginx是监听80的,所以可能还是端口冲突的问题。 需要提醒用户,在修改端口映射后,访问时需要指定新的端口号,比如http://localhost:8080。另外,如果用户希望容器使用主机的80端口,必须确保主机上没有其他服务占用该端口,或者先停止那些服务。 总结起来,步骤应该是: 1. 检查80端口占用情况。 2. 根据占用情况选择停止原有服务或修改Docker端口映射。 3. 处理可能存在的其他容器冲突或防火墙问题。 4. 正确运行Docker命令,可能需要调整参数。 还需要考虑用户是否了解如何停止现有服务,或者是否有权限这样做。如果用户无法停止占用80端口服务,修改Docker映射端口可能是更简单的解决方案。同时,确保Docker命令中的端口映射参数正确,比如`-p 主机端口:容器端口`的顺序,避免写反了。 另外,用户可能需要重启Docker容器或者整个Docker服务,但通常直接修改运行参数并重新创建容器更有效。挂载配置文件的问题可能需要检查路径是否正确,但引用3中的例子显示正确挂载了HTML目录,这可能避免了一些配置错误,但和端口占用问题关系不大。 最后,可能还需要检查SELinux的策略,因为有时候权限问题会导致端口无法绑定,但这种情况通常会有不同的错误提示。不过用户的问题明确是端口被占用,所以重点还是在端口冲突的处理上。</think>### 分步解决方案:解决Docker Nginx容器80端口被占用问题 #### 1. 确认端口占用情况 通过以下命令检查主机80端口是否被占用: ```bash sudo netstat -tuln | grep :80 # 查看占用进程的PID和名称 # 或 sudo ss -tuln | grep :80 ``` 若输出显示`LISTEN`状态,则说明80端口已被占用[^1][^2]。 #### 2. 选择解决方案 根据占用原因选择以下方法: ##### 方案一:停止占用80端口服务 ```bash sudo systemctl stop nginx # 若系统原生Nginx占用 sudo systemctl stop apache2 # 若Apache占用 ``` ##### 方案二:修改Docker容器端口映射 将主机端口改为其他空闲端口(如8080): ```bash docker run -d -p 8080:80 --name my_nginx nginx ``` 访问时需使用`http://主机IP:8080`[^2]。 ##### 方案三:终止冲突的Docker容器 若其他Docker容器占用80端口: ```bash docker ps # 查看运行中的容器 docker stop <容器ID或名称> # 停止冲突容器 docker rm <容器ID或名称> # 删除容器(可选) ``` ##### 方案四:调整防火墙/SELinux设置 若因安全策略导致端口无法绑定: ```bash sudo setenforce 0 # 临时关闭SELinux(需重启失效) # 或 sudo firewall-cmd --add-port=80/tcp --permanent # 放行80端口(Firewalld) sudo firewall-cmd --reload ``` ##### 方案五:正确挂载配置文件(若涉及) 若因挂载配置导致Nginx异常: ```bash docker run -d -p 80:80 -v /宿主机/nginx.conf:/etc/nginx/nginx.conf:ro nginx ``` 需确保配置文件中的`listen`指令未冲突[^3]。 --- ### 完整操作示例 假设系统原生Nginx占用了80端口: 1. 停止系统Nginx: ```bash sudo systemctl stop nginx sudo systemctl disable nginx # 禁止开机自启(可选) ``` 2. 启动Docker容器: ```bash docker run -d -p 80:80 --name my_nginx nginx ``` 3. 验证访问: ```bash curl http://localhost ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值