nginx子域名端口转发

随着服务器上配置的服务越来越多,只想输入域名访问,不想加上端口。准备用nginx监听80和443端口,将所有的域名请求转发到对应的服务模块

一:下载nginx

#下载解压包
wget http://nginx.org/download/nginx-1.10.2.tar.gz
#安装编译工具
yum install -y pcre pcre-devel openssl openssl-devel gcc 
#解压
tar -zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2

二:编译nginx

#需要监控https时要加上--with-http_ssl_module,这样才支持SSL
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#编译
make && make install
#启动服务
/usr/local/nginx/sbin/nginx

三:启动报错

错误

nginx: [emerg] getpwnam("www") failed

解决

解决方案一

在nginx.conf中 把user nobody的注释去掉既可

解决方案二

错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,如下命令:

/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www

四:修改Nginx配置

#为了解决没有www账户的问题
user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


    #配置负载均衡池
    #hexo负载均衡池
    upstream hexo_pool{
        server www.52wss.com:4000;
    }
    #dubbo负载均衡池
    upstream dubbo_pool{
        server www.52wss.com:8080;
    }

    #hexo端口转发
    server {
        listen       80;
        listen       443;
        server_name  www.hexo.52wss.com;
        access_log logs/hexo.log;
        error_log logs/hexo.error;
        ssl_certificate   /usr/local/nginx/cert/214309621550488.pem;
        ssl_certificate_key  /usr/local/nginx/cert/214309621550488.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        # 将http转成https请求
        if ($host ~* "^52wss.com$") {
            rewrite ^/(.*)$ https://www.hexo.52wss.com/ permanent;
        }

        #将所有请求转发给hexo_pool池的应用处理
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://hexo_pool;
        }
    }
    #dubbo端口转发
    server {
        listen       80;
        listen       443 default ssl;
        server_name  www.dubbo.52wss.com;
        access_log logs/dubbo.log;
        error_log logs/dubbo.error;
        ssl_certificate   /usr/local/nginx/cert/214309621550488.pem;
        ssl_certificate_key  /usr/local/nginx/cert/214309621550488.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        # 将http转成https请求
        if ($host ~* "^52wss.com$") {
            rewrite ^/(.*)$ https://www.dubbo.52wss.com/ permanent;
        }

        #将所有请求转发给dubbo_pool池的应用处理
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://dubbo_pool;
        }
    }
}

1、当用户访问的域名是:www.dubbo.52wss.com 时,我们自动将其请求转发给端口号为 8080 的 Tomcat 应用处理。

2、当用户访问的域名是:www.hexo.52wss.com 时,我们自动将其请求转发给端口号为 4000 的 Tomcat 应用处理。

微信公众号,欢迎扫码关注