2016-08-19 175 views
0

部分帶口我有一個應用程序的NodeJS在端口2000上運行和2010年NGINX反向代理的子域從URL

我試圖建立我的nginx.conf文件做以下端口一個WordPress安裝:

  • domain.com:服務從端口應用的NodeJS 2000
  • info.domain.com:服務WordPress的內容

我已經將DNS設置信息子域的指向,因此它指向與我的NodeJS應用程序相同的服務器。

NodeJS應用程序工作正常。 WordPress的安裝行爲真的很奇怪。

Wordpress網址一直都是錯誤的。我希望他們看起來像http://info.domain.com/blah.../,但他們看起來像這樣http://domain.com:2010/blah.../ - info.domain.com只是似乎重定向。

我試着搞亂Wordpress設置,看看他們是否有上述問題的一些部分。以前的WordPress的地址和網站地址都是http://domain.com:2010。我試圖將它們更改爲http://info.domain.com。這不起作用,因爲「信息」部分似乎從我的URL導致錯誤中被刪除。回到之前的情況,我使用phpMyAdmin將它們改回。

現在我有一個全新的問題:http://domain.com:2010/somepage/按預期工作,但是當我試圖訪問WordPress的主頁,無論是通過http://domain.com:2010/或通過http://info.domain.com/我重定向到http://domain.com/和應用的NodeJS那裏。

我真的很感激,如果有人能幫助我瞭解哪裏出了問題。

我是一個關於服務器配置的初學者,我確信我的nginx.conf文件是一個大混亂。下面附上它。

user www-data; 
worker_processes 4; 
pid /run/nginx.pid; 

events { 
    worker_connections 768; 
    # multi_accept on; 
} 

http { 

    ## 
    # Basic Settings 
    ## 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 
    # server_tokens off; 

    # server_names_hash_bucket_size 64; 
    # server_name_in_redirect off; 

    include /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    ## 
    # Logging Settings 
    ## 

    access_log /var/log/nginx/access.log; 
    error_log /var/log/nginx/error.log; 

    ## 
    # Gzip Settings 
    ## 

    gzip on; 
    gzip_disable "msie6"; 

    # gzip_vary on; 
    # gzip_proxied any; 
    # gzip_comp_level 6; 
    # gzip_buffers 16 8k; 
    # gzip_http_version 1.1; 
    # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

    ## 
    # nginx-naxsi config 
    ## 
    # Uncomment it if you installed nginx-naxsi 
    ## 

    #include /etc/nginx/naxsi_core.rules; 

    ## 
    # nginx-passenger config 
    ## 
    # Uncomment it if you installed nginx-passenger 
    ## 

    #passenger_root /usr; 
    #passenger_ruby /usr/bin/ruby; 

    ## 
    # Virtual Host Configs 
    ## 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 

    # server for reverse proxy on node application on port 2000 
    server { 
     listen   80; 
     server_name  domain.com www.domain.com; 

     #location /moodle { 
     # proxy_pass http://moodle.domain.com; 
     # proxy_http_version 1.1; 
     # proxy_set_header Upgrade $http_upgrade; 
     # proxy_set_header Connection 'upgrade'; 
     # proxy_set_header Host $host; 
     # proxy_cache_bypass $http_upgrade; 
     #} 

     location /old { 
      rewrite^http://old.domain.com/ permanent; 
     } 

     location /moodle { 
      rewrite^http://moodle.domain.com/ permanent; 
     } 

     location/{ 
      proxy_pass http://domain.com:2000; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection 'upgrade'; 
      proxy_set_header Host $host; 
      proxy_cache_bypass $http_upgrade; 
     } 

     location /info { 
      proxy_pass http://domain.com:2010; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection 'upgrade'; 
      proxy_set_header Host $host; 
      proxy_cache_bypass $http_upgrade; 
     } 
    } 

    # server for reverse proxy on node application on port 3000 
    server { 
     listen   80; 
     server_name  beta.domain.com; 

     location/{ 
      proxy_pass http://beta.domain.com:2000; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection 'upgrade'; 
      proxy_set_header Host $host; 
      proxy_cache_bypass $http_upgrade; 
     } 
    } 

    # Test re-routing to info.domain.com 
    server { 
     listen 80; 
     server_name  info.domain.com; 

     location/{ 
      proxy_pass http://domain.com:2010/; 
     } 
    } 

    # server access for phpmyadmin to listen on port 81 
    server { 
     listen    81; 
     server_name   localhost; 
     root    /usr/share/phpmyadmin; 
     index    index.php index.html index.htm; 

     if (!-e $request_filename) { 
      rewrite ^/(.+)$ /index.html?url=$1 last; 
      break; 
     } 

     location ~ .php$ { 
      try_files $uri =404; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
      fastcgi_index index.php; 
      include /etc/nginx/fastcgi_params; 
     } 
    } 

    # server access for Wordpress to listen on port 2010 
    server { 
     listen    2010; 
     server_name   info.domain.com; 
     root    /home/take/wordpress; 
     index    index.php index.html index.htm; 
     client_max_body_size 256M; 

     #if (!-e $request_filename) { 
     # rewrite ^/(.+)$ /index.html?url=$1 last; 
     # break; 
     #} 

     #location ~ .php$ { 
     # try_files $uri =404; 
     # fastcgi_pass unix:/var/run/php5-fpm.sock; 
     # fastcgi_index index.php; 
     # include /etc/nginx/fastcgi_params; 
     #} 



     # WordPress single site rules. 
     # Designed to be included in any server {} block. 

     # This order might seem weird - this is attempted to match last if rules below fail. 
     # http://wiki.nginx.org/HttpCoreModule 
     location/{ 
      try_files $uri $uri/ /index.php?$args; 
     } 

     # Add trailing slash to */wp-admin requests. 
     rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

     # Directives to send expires headers and turn off 404 error logging. 
     location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { 
       access_log off; log_not_found off; expires max; 
     } 

     # Uncomment one of the lines below for the appropriate caching plugin (if used). 
     #include global/wordpress-wp-super-cache.conf; 
     #include global/wordpress-w3-total-cache.conf; 

     # Pass all .php files onto a php-fpm/php-fcgi server. 
     location ~ [^/]\.php(/|$) { 
      fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
      if (!-f $document_root$fastcgi_script_name) { 
       return 404; 
      } 
      # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default) 

      include fastcgi_params; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     # fastcgi_intercept_errors on; 
     # fastcgi_pass php; 
      fastcgi_pass unix:/var/run/php5-fpm.sock; 
     } 

    } 




} 

回答

1

的原因,爲什麼info.domain.com您重定向是因爲你它代理到domain.com。刪除# Test re-routing to info.domain.com

info.domain.com塊應該如下所示(listen 80;是變化的):

# server access for Wordpress to listen on port 80 
server { 
    listen    80; 
    server_name   info.domain.com; 
    root    /home/take/wordpress; 
    index    index.php index.html index.htm; 
    client_max_body_size 256M; 

    #if (!-e $request_filename) { 
    # rewrite ^/(.+)$ /index.html?url=$1 last; 
    # break; 
    #} 

    #location ~ .php$ { 
    # try_files $uri =404; 
    # fastcgi_pass unix:/var/run/php5-fpm.sock; 
    # fastcgi_index index.php; 
    # include /etc/nginx/fastcgi_params; 
    #} 



    # WordPress single site rules. 
    # Designed to be included in any server {} block. 

    # This order might seem weird - this is attempted to match last if rules below fail. 
    # http://wiki.nginx.org/HttpCoreModule 
    location/{ 
     try_files $uri $uri/ /index.php?$args; 
    } 

    # Add trailing slash to */wp-admin requests. 
    rewrite /wp-admin$ $scheme://$host$uri/ permanent; 

    # Directives to send expires headers and turn off 404 error logging. 
    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { 
      access_log off; log_not_found off; expires max; 
    } 

    # Uncomment one of the lines below for the appropriate caching plugin (if used). 
    #include global/wordpress-wp-super-cache.conf; 
    #include global/wordpress-w3-total-cache.conf; 

    # Pass all .php files onto a php-fpm/php-fcgi server. 
    location ~ [^/]\.php(/|$) { 
     fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
     if (!-f $document_root$fastcgi_script_name) { 
      return 404; 
     } 
     # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default) 

     include fastcgi_params; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    # fastcgi_intercept_errors on; 
    # fastcgi_pass php; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
    } 
} 

然後,當你訪問domain.com/info,使用重定向,而不是代理方式的要求。在/info位置塊更改爲:

location /info { 
    return 301 $scheme://info.domain.com$request_uri; 
} 

的解釋:

通常,當你proxy_pass你告訴Nginx的充當反向代理網關接口(如Gunicorn或uWSGI或快速等東西)。你做了什麼,被要求Nginx綁定到你正在代理的同一個端口,這在理論上是可行的,但它不實際。

你的Wordpress網站綁定到一個unix套接字,所以爲了訪問它,你需要通過Nginx。當您在瀏覽器中發出請求時,例如http://info.domain.com,它默認爲端口80.由於您已將此請求代理到端口2010,因此我認爲您瞭解了這一點,但您應該直接從此區塊提供內容。

我希望所有這些都有道理。

+0

感謝您的回覆。這很有道理。但是,我的info.domain.com仍然被重定向到domain.com網站。不過,指向特定文件的網址可以正常工作(info.domain.com/someFile.php正常,info.domain.com/someSubdir/不會)。你有什麼建議,爲什麼發生這種情況,我可以做些什麼呢? – Regicollis

+1

這很奇怪,它不應該重定向。您是否重新啓動了Nginx並清除了您可能擁有的任何緩存機制?如果有,請發佈您的更新配置。當你說'info.domain.com/someSubdir /'不工作,你得到的錯誤是什麼,你期望的結果是什麼?一般來說,Nginx不提供目錄,只提供文件。如果你設置'autoindex on',你會得到一個可以瀏覽的分層結構,但是這不推薦。 –

+0

我嘗試了一段時間,然後工作。這一定是一些關鍵問題。一切正常,現在應該如此。非常感謝您的回答。 – Regicollis