Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Magento форсит порт
 
animatronic
Jr. Member
 
Total Posts:  3
Joined:  2013-03-28
 

Всем привет. Столкнулся со следующей проблемой…
Имеется:
- сервер с debian 6.0.6 amd64, 24 GB RAM;
- связка nginx(81)+php-fpm(socket)+varnish(80).
- magento

root@server # dpkg --list | grep php
ii libapache2-mod-php5 5.3.21-1~dotdeb.0 server-side, HTML-embedded scripting language (Apache 2 module)
ii php-pear 5.3.21-1~dotdeb.0 PEAR - PHP Extension and Application Repository
ii php-xml-parser 1.3.2-4 PHP PEAR module for parsing XML
ii php5-apc 5.3.21-1~dotdeb.0 apc module for php5
ii php5-cgi 5.3.21-1~dotdeb.0 server-side, HTML-embedded scripting language (CGI binary)
ii php5-cli 5.3.21-1~dotdeb.0 command-line interpreter for the php5 scripting language
ii php5-common 5.3.21-1~dotdeb.0 Common files for packages built from the php5 source
ii php5-curl 5.3.21-1~dotdeb.0 CURL module for php5
ii php5-fpm 5.3.21-1~dotdeb.0 server-side, HTML-embedded scripting language (FPM-CGI binary)
ii php5-gd 5.3.21-1~dotdeb.0 GD module for php5
ii php5-mcrypt 5.3.21-1~dotdeb.0 MCrypt module for php5
ii php5-memcache 5.3.21-1~dotdeb.0 memcache module for php5
ii php5-memcached 5.3.21-1~dotdeb.0 memcached module for php5
ii php5-mysql 5.3.21-1~dotdeb.0 MySQL module for php5
ii php5-redis 5.3.21-1~dotdeb.0 redis module for php5
ii php5-suhosin 5.3.21-1~dotdeb.0 suhosin module for php5

root@server3 # dpkg --list | grep nginx
ii nginx 1.2.6-1~dotdeb.0 small, powerful, scalable web/proxy server
ii nginx-common 1.2.6-1~dotdeb.0 small, powerful, scalable web/proxy server - common files
ii nginx-full 1.2.6-1~dotdeb.0 nginx web/proxy server (standard version)

root@server3 # dpkg --list | grep varnish
ii libvarnishapi1 3.0.3-1~squeeze shared libraries for Varnish
ii varnish 3.0.3-1~squeeze state of the art, high-performance web accelerator

В целом сайт работает нормально и достаточно шустро. Проблема возникает, когда пользователь пытается оформить покупку. Т.е., к примеру, добавляет товар к корзину, после чего логинится и пытается оплатить его. Именно на этом этапе, после успешного логина в ссылку подставляется порт, на котором \"висит\" бэкенд, т.е. nginx. И если честно, я не понимаю, как от этого избавиться.

p.s. К сожалению, конфиги сразу все скинуть не получается, тк ограничение на количество символов. Но при необходимости - буду их приводить.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Grohotun
Sr. Member
 
Avatar
Total Posts:  141
Joined:  2011-03-31
Saint-Petersburg
 

в ссылку подставляется порт? пример привести можете?
шаблоны точно нормальные?

 
Magento Community Magento Community
Magento Community
Magento Community
 
animatronic
Jr. Member
 
Total Posts:  3
Joined:  2013-03-28
 

Текущие конфиги varnish:

/etc/default/varnish

# Configuration file for varnish
START=yes
NFILES
=131072
MEMLOCK
=82000
DAEMON_OPTS
="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
         -p http_resp_hdr_len=8192 \
             -s malloc,3G"

/etc/varnish/default.vcl

backend default {
  
.host "127.0.0.1";
  .
port "81";
  .
connect_timeout 900s;
  .
first_byte_timeout 900s;
  .
between_bytes_timeout 900s;
}

backend admin {
 
.host "127.0.0.1";
 .
port "81";
 .
connect_timeout 18000s;
 .
first_byte_timeout 18000s;
 .
between_bytes_timeout 18000s;
}

acl purge {
  
"localhost";
  
"127.0.0.1";
  
"209.15.212.51";
}

sub vcl_recv {
    
if (req.restarts == 0{
        
if (req.http.x-forwarded-for) {
            set req
.http.X-Forwarded-For =
            
req.http.X-Forwarded-For + ", " client.ip;
        
else {
            set req
.http.X-Forwarded-For = client.ip;
        
}
    }
    
    
if (req.request != "GET" &&
      
req.request != "HEAD" &&
      
req.request != "PUT" &&
      
req.request != "POST" &&
      
req.request != "TRACE" &&
      
req.request != "OPTIONS" &&
      
req.request != "DELETE" &&
      
req.request != "PURGE"{
        
return (pipe);
    
}
    
    
if (req.request == "PURGE"{
        
if (!client.ip purge{
            error 405 
"Not allowed.";
        
}
        ban
("obj.http.X-Purge-Host ~ " req.http.X-Purge-Host " && obj.http.X-Purge-URL ~ " req.http.X-Purge-Regex " && obj.http.Content-Type ~ " req.http.X-Purge-Content-Type);
        
error 200 "Purged.";
    
}

    
if (req.http.cookie "adminhtml="{
        set req
.backend admin;
        
set req.http.connection "close";
    return(
pass);
    
}

    
if (req.url "admin"{
        set req
.backend admin;
    
set req.http.connection "close";
    return(
pass);
    
}

    
if (req.url "^/(index.php/)?(checkout|customer|catalog/product_compare|wishlist)"{
    set req
.http.connection "close";
        return(
pass);
    
}
   
    
if (req.request != "GET" && req.request != "HEAD"{
        
return (pass);
    
}
    
    set req
.url regsub(req.url"^http[s]?://[^/]+""");
    
    if (
req.url "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$"{
        
unset req.http.Https;
        unset 
req.http.Cookie;
    
}

    
if (req.http.Authorization || req.http.Https{
        
return (pass);
    
}

    
if (req.url "^/(index)"{
        
return (pass);
    
}

    
if (req.http.cookie "NO_CACHE="{
        
return (pass);
    
}

    
if (req.http.Accept-Encoding{
        
if (req.url "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|flv)$"{
            remove req
.http.Accept-Encoding;
        
} elsif (req.http.Accept-Encoding "gzip"{
            set req
.http.Accept-Encoding "gzip";
        
} elsif (req.http.Accept-Encoding "deflate" && req.http.user-agent !~ "MSIE"{
            set req
.http.Accept-Encoding "deflate";
        
else {
            remove req
.http.Accept-Encoding;
        
}
    }
    
    set req
.url regsuball(req.url,"\?gclid=[^&]+$","");
    
set req.url regsuball(req.url,"\?gclid=[^&]+&","?");
    
set req.url regsuball(req.url,"&gclid;=[^&]+","");
  
    return (
lookup);
}

sub vcl_hash {
    hash_data
(req.url);
    if (
req.http.host{
        hash_data
(req.http.host);
    
else {
        hash_data
(server.ip);
    
}
    
if (!(req.url "^/(media|js|skin)/.*\.(png|jpg|jpeg|gif|css|js|swf|ico)$")) {
        call design_exception
;
    
}
    
return (hash);
}

sub vcl_fetch {
    
if (beresp.status == 500{
       set beresp
.saintmode 10s;
       return (
restart);
    
}
    set beresp
.grace 5m;

    
set beresp.http.X-Purge-URL req.url;
    
set beresp.http.X-Purge-Host req.http.host;
    
    if (
beresp.status == 200 || beresp.status == 301 || beresp.status == 404{
        
if (beresp.http.Content-Type "text/html" || beresp.http.Content-Type "text/xml"{
            
if ((beresp.http.Set-Cookie "NO_CACHE=") || (beresp.ttl 1s)) {
                set beresp
.ttl 0s;
                return (
hit_for_pass);
            
}

            set beresp
.http.magicmarker "1";
            
            unset 
beresp.http.set-cookie;
        
else {
            set beresp
.ttl 4h;
        
}
        
return (deliver);
    
}
    
    
return (hit_for_pass);
}

sub vcl_deliver {
    
if (resp.http.X-Cache-Debug{
        
if (obj.hits 0{
            set resp
.http.X-Cache "HIT";
            
set resp.http.X-Cache-Hits obj.hits;
        
else {
           set resp
.http.X-Cache "MISS";
        
}
        set resp
.http.X-Cache-Expires resp.http.Expires;
    
else {
        remove resp
.http.X-Varnish;
        
remove resp.http.Via;
        
remove resp.http.Age;
        
remove resp.http.X-Purge-URL;
        
remove resp.http.X-Purge-Host;
    
}
    
    
if (resp.http.magicmarker{
        
unset resp.http.magicmarker;

        
set resp.http.Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
        
set resp.http.Pragma "no-cache";
        
set resp.http.Expires "Mon, 31 Mar 2008 10:00:00 GMT";
        
set resp.http.Age "0";
    
}
}

sub design_exception {
}
 
Magento Community Magento Community
Magento Community
Magento Community
 
animatronic
Jr. Member
 
Total Posts:  3
Joined:  2013-03-28
 

Конфиг хоста в nginx (все реврайты и прочее, не относящееся к делу, я выбросил):

/etc/nginx/sites-enabled/site.com.conf

server {
    listen 127.0.0.1
:81;
    
listen *:443 ssl;
    
server_name site.com www.site.com;

    
ssl_protocols    SSLv3 TLSv1;
    
ssl_certificate    /etc/nginx/ssl/site.com.crt;
    
ssl_certificate_key /etc/nginx/ssl/site.com.key;

    
access_log    /var/log/nginx/site.com.access.log;
    
error_log    /var/log/nginx/site.com.error.log;
 
    
root /var/www/vhosts/site.com/httpdocs;

    if (
$allow_visit no{
        
return 403;
    
}

    error_page 403 
/custom_403.html;

    
# protection (we have no .htaccess)
    
location ~ (^/(app/|includes/|lib/|/pkginfo/|var/|report/config.xml|downloader/template/|media/downloadable/)|/\\.svn/|/.hta.+|\\.(cfg|ini|phtml)$) {
        allow 127.0.0.1
;
        
deny all;
    
}

    location 
/phpmyadmin {
        root 
/usr/share;
        
index index.php;
    
}

    location 
~ ^/phpmyadmin.+.php{
        root 
/usr/share;
        
expires    off## Do not cache dynamic content
        
fastcgi_index index.php;
        
fastcgi_pass   unix:/var/run/php5-fpm/site.socket;
        
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name
        
fastcgi_param HTTPS on;
        
fastcgi_param HTTPS $php_https;
        include 
fastcgi_params;
    
}

    
# handle all .php files, /downloader and /report
    
location ~ (\\.php|/downloader/?|/report/?|/resize/?)$ {

        
if ($request_uri ~ /(downloader|report|resize)$)# no trailing /, redirecting
        
rewrite    ^(.*)$ $1permanent;
        
}
     
        fastcgi_index index
.php;
        include 
fastcgi_params;
        
fastcgi_param HTTPS $php_https;
        
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        if (-
e $request_filename# check if requested path exists
        
fastcgi_pass unix:/var/run/php5-fpm/site.socket;
        
}
    }

    location 
/
    
{    gzip on;
        
gzip_vary on;
        
gzip_disable    \"MSIE [1-6]\\.\";
    
        
# set expire headers
        
if ($request_uri ~* \"\\.(ico|css|js|gif|jpe?g|png)$\"{
            expires max
;
        
}

        
# set fastcgi settings, not allowed in the \"if\" block
        
include fastcgi_params;
        
fastcgi_param HTTPS $php_https;
        
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        
#fastcgi_param SCRIPT_NAME /index.php;
        # rewrite - if file not found, pass it to the backend
        
if (!-f $request_filename{
        fastcgi_pass unix
:/var/run/php5-fpm/site.socket;
        break;
        
}
    }
}

p.s. Я подозреваю, что можно схитрить и повесить varnish и nginx на 80 порт. При этом один будет смотреть в мир, другой - на localhost. Проблема в том, что это не является решением, а всего лишь “костыль”. Хотелось бы найти нормальное решение.

К сожалению, на данный момент отключили из связки varnish, тк нужен рабочий сайт, но по памяти ссылки выглядели примерно так:

http://www.site.com/cad/checkout/cart/ - пользователь добавляет товар и переходит в корзину
https://www.site.com/cad/customer/account/login/ - пытается залогиниться
http://www.site.com:81/cad/checkout/cart/ - после успешного логина пользователя отправляет на страницу с корзиной, но в адресе уже присутствует порт.

 
Magento Community Magento Community
Magento Community
Magento Community
 
MagenX
Enthusiast
 
Total Posts:  791
Joined:  2008-05-26
Dublin
 

попробуйте поставить такое
http://wiki.nginx.org/HttpCoreModule#port_in_redirect

ssl:

ssl_protocols               SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers                 AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
ssl_prefer_server_ciphers   on;
 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top